Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
vuoi
o PayPal
tutte le volte che vuoi
FileNotFoundException
Costruisce una eccezione di tipo FileNotFoundException senza alcun messaggio esplicativo.
FileNotFoundException
Costruisce una eccezione di tipo FileNotFoundException con un messaggio esplicativo.
Parametri:
s
: il messaggio.
Classe Throwable: principali metodi
getMessage
public String getMessage()
Returns: the detail message of this Throwable, or null if this Throwable does not have a detail message.
toString
public String toString()
Returns a short description of this throwable object.
printStackTrace
public void printStackTrace()
Prints this Throwable and its backtrace to the standard error stream.
Lanciare una eccezione: throw
Supponiamo di avere un handle t
non inizializzato e di volere impedire che esso possa essere usato come argomento di un metodo.
if(t == null)
throw new NullPointerException();
Lanciare una eccezione consente di evitare di trattare un problema nel contesto corrente.
11Lanciare una eccezione: throw
Quando una eccezione viene lanciata, viene creato un oggetto della classe Exception o di una sua sottoclasse.
Oltre a quello già visto, c'è un altro costruttore che ha per argomento una stringa che può essere usata per dare informazioni sull'eccezione.
if(t == null) throw new NullPointerException("t non è inizializzato");
12La parola chiave throws
Specificazione delle eccezioni
Java richiede che chi scrive un metodo debba esplicitamente indicare se esso può eventualmente sollevare delle eccezioni.
Il metodo seguente:
void f(){ // ... }
Non solleverà alcuna eccezione tranne quelle di tipo Runtime Exception.
13La parola chiave throws
Nel caso in cui f()
dovesse sollevare eccezioni di tipo checked, Java, in fase di compilazione, lo segnalerà, costringendo il programmatore ad agire in uno dei seguenti modi:
- Gestire l'eccezione con try
e catch
;
- Segnalare che il metodo può
- sollevare eccezioniï usando throws.Ad esempio un metodo f() che può sollevareï eccezioni di tipo I/O si indicherà:
void f() throws IOException{ //... }
- La parola chiave try
Se siamo all’interno di un metodo e vogliamoï che una eccezione venga risolta senza uscire dal metodo, useremo un blocco try.try {
// Codice che potrebbe generare eccezioni
} - La parola chiave catch
Le eccezioni sollevate sono gestite da uno o più blocchi posti subito dopo il blocco try. Ognuno di tali blocchi inizia con la parola chiave catch ed ha un argomento di tipo diverso.catch(Type1 id1) {
// gestore dell’eccezione di tipo Type1
}
catch(Type2 id2) {
// gestore dell’eccezione di tipo Type2
}
catch(Type3 id3) {
// gestore dell’eccezione di tipo Type3
}
Tipo di eccezione sollevata. Viene poi eseguito il codice all'interno del blocco selezionato. Solo il blocco catch selezionato viene eseguito. La parola chiaveIl risultato è: 3{ Il risultato è: 6System.out.println("Il risultato è: "+ 6/cnt); java.lang.ArithmeticException:} //end for-loop / by zeroSystem.out.println("Ho finito il programma, ciao!! "); Application Exit...} //end main} //end class prova1 21Esempio: prova2class prova2 OUTPUT{ public static void main(String[] args) c:\programmi\java\bin\javac.exe{ prova2.javatry{ File Compiled...for(int cnt = 2; cnt >-1; cnt--){ --------- Javac Output -----------System.out.println("Il risultato è: " prova2.java:13:+ 6/cnt); 'try' without 'catch' or 'finally'.} //end for-loop} //end try block 1 errorSystem.out.println("Ho finito il programma, ciao!! ");} //end main} //end class prova2 22Esempio: prova3class prova3 {public static void main(String[] args){try{ for(int cnt = 2; cnt >-1; cnt--){ System.out.println("Il risultato è: " 6/cnt); } //endfinally
è usata quando si vuole eseguire del codice indipendentemente dal fatto che sia lanciata o meno un'eccezione.try
{ // regione che contiene codice che potrebbe // lanciare le eccezioni: Type1, Type2, or Type3 } catch (Type1 a1) { // gestisce Type1 } catch (Type2 b1) { // gestisce Type2 } catch (Type3 c1) { // gestisce Type3 } finally { // codice che viene eseguito in ogni caso } Esempio: prova1class prova1 { public static void main(String[] args) { for (int cnt = 2; cnt > -1; cnt--) { System.out.println("Il risultato è: " + 6 / cnt); } System.out.println("Ho finito il programma, ciao!!"); } }
Esempio: prova1 OUTPUTc:\programmi\java\bin\java.exe public static void main(String[] args) prova1 { for (int cnt = 2; cnt > -1; cnt--)
for-loop} //end try block catch(ArithmeticException e){ System.out.println("Il messaggio è: " + e.getMessage() + "\nStacktrace è:"); e.printStackTrace(); System.out.println("La stringa è: " + e.toString()); System.out.println("Metti qui le azioni correttive"); } //end catch block System.out.println("Ho finito il programma, ciao!!"); } //end main 23} //end class prova3 Esempio: prova3 e.getMessage()OUTPUT c:\programmi\java\bin\java.exe prova3 Il risultato è: 3 e.printStacktrace() Il risultato è: 6 Il messaggio è: / by zero Stacktrace è: java.lang.ArithmeticException: / by zero at prova3.main(prova3.java:10) La stringa è: java.lang.ArithmeticException: / by zero Metti qui le azioni correttive e.toString() Ho finito il programma, ciao!! Application Exit... 24 Esempio: prova4 class prova4 { public static void main(String[] args){ try{ for(int cnt = 2; cnt >-1; cnt--){ System.out.println("IlIl risultato è: " 6/cnt); } //end for-loop} //end try blockcatch(Exception e){System.out.println("Messaggio: sono la superclasse ");} //end catchcatch(ArithmeticException e){System.out.println("Messaggio: sono la sottoclasse ");} //end catch blockSystem.out.println("Ho finito il programma,ciao!! ");} //end main} //end class prova4 25Esempio: prova4OUTPUTc:\programmi\java\bin\javac.exe prova4.javaFile Compiled...--------------------------- Javac Output ---------------------------prova4.java:11: catch not reached.catch(ArithmeticException e){^1 error 26Esempio: prova4È possibile creare un solo gestore per ogni tipo di eccezione: basterà scrivere un blocco catch conparametro di tipo Exception.catch(Exception e) {System.out.println("caught any exception");}Poiché un catch di questo tipo catturerebbe ogni eccezione, se vogliamo un comportamento diverso inalcune situazioni, bisognerà scrivere deiblocchicatch ad hoc e mettere quello di tipo Exception perultimo.
27Esempio: prova5
class prova5 {
public static void main(String[] args){
try{
for(int cnt = 2; cnt >-1; cnt--){
System.out.println("Il risultato è: " + 6/cnt);
} //end for-loop
} //end try block
catch(ArithmeticException e){
System.out.println("Messaggio: sono la sottoclasse ");
} //end catch block
catch(Exception e){
System.out.println("Messaggio: sono la superclasse ");
} //end catch block
System.out.println("Ho finito il programma,ciao!! ");
} //end main
} //end class prova5
28Esempio: prova5OUTPUT
c:\programmi\java\bin\java.exe prova5
Il risultato è: 3
Il risultato è: 6
Messaggio: sono la sottoclasse
Ho finito il programma,ciao!!
Application Exit...
29Esempio: prova6
class prova6{
public static void main(String[] args){
int a[] = new int[2];
try{
for(int cnt = 2; cnt >-1; cnt--){
System.out.println("Il risultato è: " + 6/cnt);
System.out.println("valore");
} //end for-loop
} //end try block
catch(ArithmeticException e){
System.out.println("Messaggio: sono la sottoclasse ");
} //end catch block
catch(Exception e){
System.out.println("Messaggio: sono la superclasse ");
} //end catch block
System.out.println("Ho finito il programma,ciao!! ");
} //end main
} //end class prova6
array: " + a[cnt]); } //end for-loop } //end try block catch(ArithmeticException e){ System.out.println("Messaggio: sono la sottoclasse "); } //end catch block catch(Exception d){ System.out.println("Messaggio: sono la superclasse "); d.printStackTrace(); } //end catch block System.out.println("Ho finito il programma,ciao!! "); } //end main } //end class prova6 30Esempio: prova6 OUTPUT c:\programmi\java\bin\java.exe prova6 Il risultato è: 3 Messaggio: sono la superclasse java.lang.ArrayIndexOutOfBoundsException: 2 at prova6.main(prova6.java:7) Ho finito il programma,ciao!! Application Exit... 31Esempio: prova7 class prova7{ public static void main(String[] args){ int a[] = new int[2]; for(int cnt = 2; cnt >-1; cnt--) { try{ System.out.println("Il contatore è: " + cnt); System.out.println("Il risultato è: " + 6/cnt); System.out.println("valore array: " + a[cnt]); } //end try block catch(ArithmeticException e){ System.out.println("Messaggio: sono la sottoclasse "); } //end catch block } } //end main } //end class prova7
e){System.out.println("Messaggio: sono la sottoclasse1 "+e.toString());} //end catch block catch(ArrayIndexOutOfBoundsException e) {System.out.println("Messaggio: sono la sottoclasse2 "+e.toString());} //end catch block } //end for-loop System.out.println("Ho finito il programma,ciao!! ");} //end main } //end class prova7 32 Esempio: prova7 OUTPUT c:\programmi\java\bin\java.exe prova7a Il contatore è: 2 Il risultato è: 3 Messaggio: sono la sottoclasse2 java.lang.ArrayIndexOutOfBoundsException: 2 Il contatore è: 1 Il risultato è: 6 valore array: 0 Il contatore è: 0 Messaggio: sono la sottoclasse1 java.lang.ArithmeticException: / by zero Il contatore è: -1 Il risultato è: -6 Messaggio: sono la sottoclasse2 java.lang.ArrayIndexOutOfBoundsException: -1 Ho finito il programma,ciao!! Application Exit... 33 Creare le proprie eccezioni Per convenzione, le classi delle eccezioni personalizzate devono estendere la classe Exception o una delle sue sottoclassi dirette.