Anteprima
Vedrai una selezione di 9 pagine su 40
La gestione delle eccezioni in Java Pag. 1 La gestione delle eccezioni in Java Pag. 2
Anteprima di 9 pagg. su 40.
Scarica il documento per vederlo tutto.
La gestione delle eccezioni in Java Pag. 6
Anteprima di 9 pagg. su 40.
Scarica il documento per vederlo tutto.
La gestione delle eccezioni in Java Pag. 11
Anteprima di 9 pagg. su 40.
Scarica il documento per vederlo tutto.
La gestione delle eccezioni in Java Pag. 16
Anteprima di 9 pagg. su 40.
Scarica il documento per vederlo tutto.
La gestione delle eccezioni in Java Pag. 21
Anteprima di 9 pagg. su 40.
Scarica il documento per vederlo tutto.
La gestione delle eccezioni in Java Pag. 26
Anteprima di 9 pagg. su 40.
Scarica il documento per vederlo tutto.
La gestione delle eccezioni in Java Pag. 31
Anteprima di 9 pagg. su 40.
Scarica il documento per vederlo tutto.
La gestione delle eccezioni in Java Pag. 36
1 su 40
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

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ò

  1. sollevare eccezioniï usando throws.Ad esempio un metodo f() che può sollevareï eccezioni di tipo I/O si indicherà:
    void f() throws IOException{ //... }
  2. 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
    }
  3. 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 chiave finally è 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: prova1
class 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 OUTPUT
c:\programmi\java\bin\java.exe
public static void main(String[] args) prova1 {
    for (int cnt = 2; cnt > -1; cnt--)
Il 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); } //end
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("Il
Il 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.
        
Dettagli
Publisher
A.A. 2012-2013
40 pagine
1 download
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher unigruppi di informazioni apprese con la frequenza delle lezioni di Programmazione 1 e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Catania o del prof Di Stefano Antonella.