29. oktober 2003 - 18:16Der er
31 kommentarer og 1 løsning
Deklarering af egen exception
Jeg har set andre eksempler hvor denne slags kode virker, så hvorfor gør MIN ikke? Det er vigtigt at der bruges "throws" som en del af funtionsdeklareringen
public void setMonth(int month) throws IllegalMonthException { this.month = month;
if ( ( month > 13 ) || (month < 1) ) { throw new IllegalMonthException("Ulovlig maaned."); } }
class IllegalMonthException extends Exception { public IllegalMonthException(String text) { super(); } }
...og jeg får:
unreported exception legeplads.opg8.IllegalMonthException; must be caught or declared to be thrown test.setMonth(12); ^ 1 error
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Hvis en metoder er erklæret til at smide en Exception kan man enten have try catch omkring kaldet eller erklære den kaldende metode til at smide den pågældende exception (og det kan gentages helt ud til main).
Et eller andet må være forskelligt mellem din og min kode !
C:\>type Ex.java public class Ex { public static void main(String[] args) { throw new MyException("test"); } }
class MyException extends Exception { public MyException(String s) { super(s); } } C:\>javac Ex.java Ex.java:3: unreported exception MyException; must be caught or declared to be th rown throw new MyException("test"); ^ 1 error
public final class b { public void setMonth(int month){ if ( ( month > 13 ) || (month < 1) ){ throw new IllegalArgumentException("Ulovlig maaned."); } }
public static void main(String args[]){ new b(); } }
Dette virker fint, men hvorfor virker det ikke hvis jeg laver min egen Exception???
Hver sin smag. En exception er en undtagelse der kan bryde normal programudførelse. En test for at et tal ligger mellem 1 og 12 er er almindelig programstump. Der er ingen grund til at oprette et nyt objekt af den grund, og skjule den logiske tankegang i koden
Hm....jeg skal vist vænne mig til at skrive "1. dette er en opgave i forbindelse med mit studie" og "2. Jeg har ikke selv bestemt den"...det er som sagt vigtigt at der bruges throws i metodedeklareringen. Hvorvidt det er smart at lave det på den måde skal jeg ikke blande mig i...men jeg undrer mig over at så mange af de ellers venligt mente kommentarer overser det. Det er ikke for at være sur.
Arne_v, kan du give forklaringen på hvorfor min kode så ikke virker, når du selv fortæller at man kan erklære den kaldende metode til at smide den pågældende exception uden at bruge try-catch? Venligst Anders Schrøder
Selv om det er en skoleopgave må vi vel godt kommentere rimeligheden i det, så du ved lidt om hvad du ville gøre i den virkelige verden.
Nu kan du jo spørge din lærer om det er en fornuftig måde generelt at checke input på, og om man ikke lige så godt kunne klare sig med IllegalArgumentEx.. - og hvad man ellers skal gøre hvor og hvornår.
Som jeg sagde: Det er ikke for at være sur. Men jeg prøver jo netop at throwe en exception i min kode, og det lykkes ikke. Jeg forstår stadig ikke hvorfor, men regner heller ikke mig selv for at være specielt smart.
Min lærer har såmænd ikke bestemt hvordan jeg skal lave eksemplet...jeg har selv valgt noget nemt.
Indrømmet, nu har jeg fået det til at virke med en IllegalArgumentExeption. Jeg er dog stadig ikke smart nok til at se forskellen på mine to klasser, der kaldes i den ene eller den anden metode: import java.util.*;
public class Dato { int day=0, month=0;
public void setDay( int day ) { try { this.day = day;
if ( (day < 1) || (day > 31) ) { IllegalDayException id = new IllegalDayException(); throw id; }
} catch (IllegalDayException i) { System.out.println( day + " er ikke en lovlig dag."); } } public void setMonth(int month) throws IllegalArgumentException { this.month = month; System.out.println(month); if ( ( month > 12 ) || (month < 1) ) { throw new IllegalArgumentException(); } }
public static void main (String args[]) { Dato test = new Dato(); test.setDay(32); test.setMonth(13); } }
class IllegalDayException extends Exception { public IllegalDayException() {
} } class IllegalMonthException extends Exception { public IllegalMonthException(String text) { super(); } }
...tak for hjælpen, anyway. Repsak er den eneste, der har svaret, men jeg vil helst give point til ErikJacobsen, da han satte mig på sporet af IllegalArgumentException...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.