SlideShare a Scribd company logo
1 of 6
1
Gestione delle eccezioni
Java dispone di una gestione avanzata delle eccezioni, cioè degli errori di
runtime. Nei vari package esistono numerose eccezioni predefinite. Ma è
anche possibile definire delle eccezioni personalizzate.
Le eccezioni sono a tutti gli effetti delle classi e come tali appartengono ai
package; tutte le eccezioni derivano direttamente o indirettamente dalle
classi Exception e quindi dalla sua superclasse Throwable.
Come è insito nel concetto di ereditarietà, più si scende nella catena
gerarchica e più si avranno eccezioni specializzate. Di conseguenza
Exception è l’eccezione più generica di tutte: cioè le intercetta tutte.
try – catch - finally
La sintassi da utilizzare per la gestione delle eccezioni è la seguente:
try{
…. Codice che può generare errori di runtime (eccezioni)
}
catch(NullPointerException npe)
{ System.out.println(npe.getMessage()); //stampa msg errore
npe.printStackTrace(); //stampa il msg d’errore
//e la catena di eccezioni conseguenti
//con indicazione della riga
}
catch(ArrayIndexOutOfBoundException obe)
{
//si tratta di un’eccezione dello stesso livello della precedente
}
catch(Exception e) //essendo più generica va dopo
{
//intercetta tutte le eccezioni sfuggite alle precedenti
}
finally
{
//blocco eseguito sia in caso di eccezioni sia in caso di esecuzione normale
}
Lancio di un’eccezione
Le eccezioni vengono normalmente lanciate automaticamente durante
l’esecuzione dalla VM java. Tuttavia è possibile lanciare un’eccezione in modo
manuale. Ricordiamo infatti che le eccezioni sono delle classi e come tali possono
essere istanziate. Ad esempio la classe Exception ha un costruttore che accetta
come parametro il messaggio d’errore.
E’ possibile scrivere un codice di questo tipo:
public void preleva(int importo) throws Exception
{
if(saldo>=importo) saldo-=importo;
else throw new Exception(“Conto scoperto”);
}
Dopo aver scritto questo codice sarà obbligatorio chiamare il metodo preleva
all’interno di un try-catch:
try{
preleva(100);
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
Uso di throws per i metodi
La parola chiave throws indica che un metodo lancia una certa eccezione, ma
come conseguenza fa si che la gestione di tale eccezione venga portata a livello
superiore, cioè nella porzione di codice in cui il metodo viene chiamato.
public BufferedReader apriFile(String nomeFile) throws IOException
{
FileReader fr=new FileReader(nomeFile);
BufferedReader out =new BufferedReader(fr);
return out;
}
Quando però chiamerò questo metodo devo ricordarmi di usare il try-catch, a
meno che non mi trovi in un altro metodo che lo rilancia ancora all’esterno.
try
{ BufferReader out=apriFile(“prova.txt”);
……………….
}
catch(IOException ioe)
{
System.out.println(ioe.getMessage());
}
Eccezioni Personalizzate
Tutte le classi Exception possono essere estese, quindi possiamo creare delle
nostre Eccezioni come sottoclassi di Exception o di una più specifica eccezione.
public class ContoScopertoException extends Exception
{
public ContoScopertoException()
{ super(“Conto Scoperto”);}
}
Dopo di che potremo modificare in questo modo il metodo preleva
public void preleva(int importo) throws ContoScopertoException
{
if(saldo>=importo) saldo-=importo;
else throw new ContoScopertoException();
}
Eccezioni Personalizzate
Tutte le classi Exception possono essere estese, quindi possiamo creare delle
nostre Eccezioni come sottoclassi di Exception o di una più specifica eccezione.
public class ContoScopertoException extends Exception
{
public ContoScopertoException()
{ super(“Conto Scoperto”);}
}
Dopo di che potremo modificare in questo modo il metodo preleva
public void preleva(int importo) throws ContoScopertoException
{
if(saldo>=importo) saldo-=importo;
else throw new ContoScopertoException();
}

More Related Content

Viewers also liked

Viewers also liked (14)

Java lezione 3
Java lezione 3Java lezione 3
Java lezione 3
 
Database Entity
Database EntityDatabase Entity
Database Entity
 
MySQL Database
MySQL DatabaseMySQL Database
MySQL Database
 
Java lezione 6
Java lezione 6Java lezione 6
Java lezione 6
 
Java lezione 4
Java lezione 4Java lezione 4
Java lezione 4
 
Database
DatabaseDatabase
Database
 
Oracle PLSql 4
Oracle PLSql 4Oracle PLSql 4
Oracle PLSql 4
 
55 conservation text
55 conservation text55 conservation text
55 conservation text
 
Java lezione 18
Java lezione 18Java lezione 18
Java lezione 18
 
How To Market Your Online Portfolio
How To Market Your Online PortfolioHow To Market Your Online Portfolio
How To Market Your Online Portfolio
 
Java lezione 12
Java lezione 12Java lezione 12
Java lezione 12
 
Oracle 1
Oracle 1Oracle 1
Oracle 1
 
Java lezione 16
Java lezione 16Java lezione 16
Java lezione 16
 
Java lezione 17
Java lezione 17Java lezione 17
Java lezione 17
 

Similar to Java lezione 5

Similar to Java lezione 5 (8)

Baby Steps TripServiceKata
Baby Steps TripServiceKataBaby Steps TripServiceKata
Baby Steps TripServiceKata
 
Corso Java
Corso JavaCorso Java
Corso Java
 
Java Unit Testing - JUnit (2)
Java Unit Testing - JUnit (2)Java Unit Testing - JUnit (2)
Java Unit Testing - JUnit (2)
 
Javaday 2006: Java 5
Javaday 2006: Java 5Javaday 2006: Java 5
Javaday 2006: Java 5
 
Java5
Java5Java5
Java5
 
Design pattern template method
Design pattern template methodDesign pattern template method
Design pattern template method
 
Py a1 python-unit_testing
Py a1 python-unit_testingPy a1 python-unit_testing
Py a1 python-unit_testing
 
Vulnerabilità exploit
Vulnerabilità exploitVulnerabilità exploit
Vulnerabilità exploit
 

More from Sergio Ronchi (19)

Java lezione 19
Java lezione 19Java lezione 19
Java lezione 19
 
Java lezione 15
Java lezione 15Java lezione 15
Java lezione 15
 
Java lezione 14
Java lezione 14Java lezione 14
Java lezione 14
 
Java lezione 13
Java lezione 13Java lezione 13
Java lezione 13
 
Java lezione 11
Java lezione 11Java lezione 11
Java lezione 11
 
Java lezione 10
Java lezione 10Java lezione 10
Java lezione 10
 
Java lezione 9
Java lezione 9Java lezione 9
Java lezione 9
 
Java lezione 8
Java lezione 8Java lezione 8
Java lezione 8
 
Java lezione 2
Java lezione 2Java lezione 2
Java lezione 2
 
Java introduzione
Java introduzioneJava introduzione
Java introduzione
 
Java Lezione 1
Java Lezione 1Java Lezione 1
Java Lezione 1
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Oracle PL sql 3
Oracle PL sql 3Oracle PL sql 3
Oracle PL sql 3
 
Oracle PL sql 2
Oracle PL sql 2Oracle PL sql 2
Oracle PL sql 2
 
Oracle 3 (sq lnet)
Oracle 3 (sq lnet)Oracle 3 (sq lnet)
Oracle 3 (sq lnet)
 
Oracle 2 (sqlplus)
Oracle 2 (sqlplus)Oracle 2 (sqlplus)
Oracle 2 (sqlplus)
 
Sql 5
Sql 5Sql 5
Sql 5
 
Sql 4
Sql 4Sql 4
Sql 4
 
Sql 3
Sql 3Sql 3
Sql 3
 

Java lezione 5

  • 1. 1 Gestione delle eccezioni Java dispone di una gestione avanzata delle eccezioni, cioè degli errori di runtime. Nei vari package esistono numerose eccezioni predefinite. Ma è anche possibile definire delle eccezioni personalizzate. Le eccezioni sono a tutti gli effetti delle classi e come tali appartengono ai package; tutte le eccezioni derivano direttamente o indirettamente dalle classi Exception e quindi dalla sua superclasse Throwable. Come è insito nel concetto di ereditarietà, più si scende nella catena gerarchica e più si avranno eccezioni specializzate. Di conseguenza Exception è l’eccezione più generica di tutte: cioè le intercetta tutte.
  • 2. try – catch - finally La sintassi da utilizzare per la gestione delle eccezioni è la seguente: try{ …. Codice che può generare errori di runtime (eccezioni) } catch(NullPointerException npe) { System.out.println(npe.getMessage()); //stampa msg errore npe.printStackTrace(); //stampa il msg d’errore //e la catena di eccezioni conseguenti //con indicazione della riga } catch(ArrayIndexOutOfBoundException obe) { //si tratta di un’eccezione dello stesso livello della precedente } catch(Exception e) //essendo più generica va dopo { //intercetta tutte le eccezioni sfuggite alle precedenti } finally { //blocco eseguito sia in caso di eccezioni sia in caso di esecuzione normale }
  • 3. Lancio di un’eccezione Le eccezioni vengono normalmente lanciate automaticamente durante l’esecuzione dalla VM java. Tuttavia è possibile lanciare un’eccezione in modo manuale. Ricordiamo infatti che le eccezioni sono delle classi e come tali possono essere istanziate. Ad esempio la classe Exception ha un costruttore che accetta come parametro il messaggio d’errore. E’ possibile scrivere un codice di questo tipo: public void preleva(int importo) throws Exception { if(saldo>=importo) saldo-=importo; else throw new Exception(“Conto scoperto”); } Dopo aver scritto questo codice sarà obbligatorio chiamare il metodo preleva all’interno di un try-catch: try{ preleva(100); } catch(Exception e) { System.out.println(e.getMessage()); }
  • 4. Uso di throws per i metodi La parola chiave throws indica che un metodo lancia una certa eccezione, ma come conseguenza fa si che la gestione di tale eccezione venga portata a livello superiore, cioè nella porzione di codice in cui il metodo viene chiamato. public BufferedReader apriFile(String nomeFile) throws IOException { FileReader fr=new FileReader(nomeFile); BufferedReader out =new BufferedReader(fr); return out; } Quando però chiamerò questo metodo devo ricordarmi di usare il try-catch, a meno che non mi trovi in un altro metodo che lo rilancia ancora all’esterno. try { BufferReader out=apriFile(“prova.txt”); ………………. } catch(IOException ioe) { System.out.println(ioe.getMessage()); }
  • 5. Eccezioni Personalizzate Tutte le classi Exception possono essere estese, quindi possiamo creare delle nostre Eccezioni come sottoclassi di Exception o di una più specifica eccezione. public class ContoScopertoException extends Exception { public ContoScopertoException() { super(“Conto Scoperto”);} } Dopo di che potremo modificare in questo modo il metodo preleva public void preleva(int importo) throws ContoScopertoException { if(saldo>=importo) saldo-=importo; else throw new ContoScopertoException(); }
  • 6. Eccezioni Personalizzate Tutte le classi Exception possono essere estese, quindi possiamo creare delle nostre Eccezioni come sottoclassi di Exception o di una più specifica eccezione. public class ContoScopertoException extends Exception { public ContoScopertoException() { super(“Conto Scoperto”);} } Dopo di che potremo modificare in questo modo il metodo preleva public void preleva(int importo) throws ContoScopertoException { if(saldo>=importo) saldo-=importo; else throw new ContoScopertoException(); }