Sei sulla pagina 1di 3

Posso avere degli errore di programmazione e errore di dati in ingresso.

class ErroreProgrammazione{
static int[] a = new int[2];
static void p(int i, int val){
a[i] = val;
}
public static void main(String[] args){
p(0,5);
p(2, 4); //Errore non vi l'indice 2;
p(1,3);
}
}
L'errore una deviazione eccezionale al normale flusso del codice.
Una soluzione farsi restituire un valore di controllo (Per es boolean) e cos mi s
alvo. Non ho errori che mi impediscono il normale flusso; Problema 1 che il codi
ce poco leggibile.
Problema 2 Ho introdotto un altro valore, e se il metodo restituisce gi qualche c
os'altro?
Problema 3 Non sempre dove ho il problema dove posso o so risolverlo (Magari la
soluzione sta in altri record pi in basso. Accade spesso in interfacce grafiche).
Il meccanismo di trattamento delle eccezioni serve per risolvere i 3 probl e sop
rattutto al 3. Serve per introdurre dei flussi di codice alternativi se e solo s
e ho delle situazioni eccezionali.
Il costrutto throw serve per lanciare un oggetto attraverso lo stack dei record
. Infrange i record finch non arrivo al catch. throw contiene tutte le informazio
ni dell'errore.
[...]
if(a.length > i)
a[i] = val;
else
throw new ArrayIndexOutOfBoundsException();
[main...]
try{
//codice che potrebbe generare errore
} catch( ArrayIndexOutOfBoundsException err){
//cosa fare se arriva l'eccezione;
}
L'errore gestito dal catch. Nel try metto il codice che potrebbe creare errore e
lo metto SOLO se so risolverlo. Altrimenti uso lo scarica barile. Le eccezioni
sono passate all'indietro finch trovo l'exception handler che cattura l'eccezione
e la gestisce(dentro ci sar del codice che mi risolve il problema) riprendendo l
'esecuzione dalla linea di codice successiva alla } del catch.
LANCIARE ECCEZIONI
Si usa il throw, sono oggetti, nelle librerie ce ne sono gi alcune e sono dispost
e in gerarchia.
Una categoria "runtime ecxeptions" in genere sono automaticamente lanciata. Non
obbligatorio gestirla.
Una categoria non runtime Ecxeption e sono obbligatorie da risolvere perch coinvo
lge il sistema ES: I/O.
Nel catch possso prendere un eccezione e poi rilanciarla a sua volta a qualcun'a
ltro.
L'eccezione dall'esterno non rilevabile. Se viene lanciata un'eccezione che il c
atch non sa risolvere il programma crasha.
parseInt(Stringa)
Se n stringa ci sono interi lo trasforma in interi( es Stringa = 20 , pareInt()
restituisce 20)
I tipi di errori sono elencati in javadoc. In java doc si cerca nella classe, il
metodo parsInt() e ci clicco sopra e c' scritto. Sotto il pargrafo throw ho l'in
fo che mi dice che errore restituisce(se lo fa).
Possono essere generate pi eccezzioni e le eccezioni devono stare tutte insieme p
erch dipendono una dall'altra, se so anche come risolvere con pi catch una dopo l'
altra.
finally una garanzia che il codice viene eseguito. Se c' un eccezione che non vie
ne risolta in qualunque caso fai il codice in finally( Es: chiudi il file).
Le Runtime Exception non obbligatorio a risolverle. Le altre si deve per forza f
are qualcosa.
Se un metodo pu lanciare un eccez e nn la cattura deve essere segnalato con throw
s tranne che per i runtimeEcxeption.
class Generica{
void m(String s) throws ClassNotFoundExc{
Class c = Class.forName(s);
}
}
in questo modo notifico e restituisco l'errore. Dico che c'.
COME OPERARE CON LE ECCEZIONI
Per creare un nuovo tipo di eccezioni si estende la classe Exception con la keyw
ord extend.
Es:
class SaldoInsufficiente extends Exception {
/*Costruttore*/
public SaldoInsufficiente(String message) {
super(message);
}
}
In tali eccezioni si dovrebbero specificare il maggior numero di informazioni po
ssibili riguardo all'errore (ad esempio il numero del conto e il valore che si s
ta cercando di prelevare nel caso non ci siano abbastanza soldi in un conto corr
ente).
Il costrutto super serve per richiamare il costruttore padre della classe da est
endere. In questo modo non si scrive nuovo codice e si fa pi veloce.
Successivamente si aggiunge:
metodo() throws new NomeEccezione
per dichiarare che si lancia un eccezione. Questo permette al compilatore java d
i capire che verr lanciata un eccezione e di che tipo. Questa una dichiarazione d
i un oggetto che deve essere catturato da un costrutto catch successivo.
Se un eccezione viene lanciata all'interno di un metodo e subito dopo vi un catc
h allora catturata dallo stesso. In altre parole: Quando lancio un eccezione ess
a cerca di essere catturata dal suo record di attivazione. Se non catturata pass
a a quello successivo distruggendo il record di origine. Vedi EsempioEccezioni.j
ava, il metodo p(int i).

Potrebbero piacerti anche