* Изключения дефинирани от потребителя
Публикувано на 21 октомври 2009 в раздел ПИК-3 Java.
Вече се запознахме подробно как се хвърлят изключения в Java. Веднага остава въпроса “можем ли ние сами да си дефинираме изключения”. Отговорът е положителен.
Всичко, което трябва да направите при дефиниране на изключение е да създадете клас, който наследява клас Exception:
public class CarsExample{
public static void main(String args[]) throws Exception {
try{
Car c = new Car(-150, "BMW X5");
}
catch (SpeedException e){
System.out.println(e.toString());
}
}
}
class SpeedException extends Exception{
private int speed;
public SpeedException(int speed){
this.speed = speed;
}
public String toString(){
return "Speed of Car must not be negative: "+this.speed;
}
}
class Car{
private int speed;
private String model;
public Car(int speed, String model) throws SpeedException{
if (speed < 0) throw new SpeedException(speed);
else{
this.speed = speed;
this.model = model;
}
}
public void showInfo(){
System.out.println("The car "+this.model+" has maxspeed of "+this.speed);
}
public int getSpeed(){
return this.speed;
}
public void setSpeed(int speed) throws SpeedException{
if (speed < 0) throw new SpeedException(speed);
else this.speed = speed;
}
public int compare(Car opponent){
if (this.speed < opponent.getSpeed()) return 1;
else{
if (this.speed > opponent.getSpeed()) return -1;
else return 0;
}
}
}
Виждате, че при изключенията няма абсолютно нищо страшно. Единственото, за което трябва да се погрижите е да предефинирате метод “toString()”. Колкото до другите методи – printStackTrace() си съществува и го наследяваме директно от клас Exception. Проблем се явява метод “getMessage()”, който ако не се предефинира, то ще върне резултат null. Затова обикновено предаваме и съобщение към супер класа:
class SpeedException extends Exception{
private int speed;
public SpeedException(int speed){
super("Speed of car must not be negative: "+speed);
this.speed = speed;
}
public SpeedException(int speed, String msg){
super(msg);
this.speed = speed;
}
public String toString(){
return "Speed of Car must not be negative: "+this.speed;
}
}
Вече можете да извиквате метод “getMessage()” без проблем. Виждате, че дефинирането на изключения е изключително лесно. Това е и мощен метод за контрол над интегритета на данните в клас.
2 коментара за “Изключения дефинирани от потребителя”
Trackback URI | RSS за коментарите
Пусни коментар
Категории
- Бази от Данни (52)
- Вероятности (31)
- История (15)
- Кучета (69)
- Лада Нива (96)
- Математика (166)
- Методика (53)
- Общи работи (110)
- ПИК-3 Java (38)
- Политика (41)
- Програмни Среди (1)
- ПТСК (41)
- С/C++ (45)
- Семейни (16)
- Физика (35)
- ХHTML/JS (25)
- Храна (11)
Нови
- Извеждане на няколко произволни реда
- Full-Text търсене с InnoDB в MySQL
- Късметче от кафе
- Пред блока…
- Бушонно табло на Лада Нива
21 юни 2010 на 0:09
B class Car редовете
public Car(int speed, String model) throws SpeedException{
if (speed < 0) throw new SpeedException(speed);
else{
this.speed = speed;
this.model = model;
}
}
не би ли трябвало да елиминират нуждата от get u set методи?
21 юни 2010 на 10:23
Това е конструктор – той се извиква само веднъж при създаването на обекта. Get и Set методите се използват след като обекта е вече създаден.