Se utilizziamo un metodo che può generare un'eccezione, dobbiamo scrivere il codice che ne permetta una appropriata gestione. Ovvero dobbiamo usare il costrutto try/catch (o lasciare che l'eccezione si propaghi al chiamante).
Vediamo un esempio con la chiamata al metodo statico getSequencer() di MidiSystem:
package Chap11;
import javax.sound.midi.MidiSystem;
import javax.sound.midi.MidiUnavailableException;
import javax.sound.midi.Sequencer;
public class MusicTest1 {
public void play() {
try {
Sequencer s = MidiSystem.getSequencer();
System.out.println("Done!");
}
catch (MidiUnavailableException ex) {
System.out.println("Something went wrong: " + ex.getMessage());
}
}
public static void main(String[] args) {
MusicTest1 mt = new MusicTest1();
mt.play();
}
}
Per generare una eccezione si usa throw e si marca il metodo dichiarando quale tipo di eccezione può lanciare. Tipo:
public void risky() throws MyException {
// ...
if (somethingBad) {
throw new MyException();
}
}
Il compilatore controlla tutte le eccezioni, tranne quelle che sono di tipo RuntimeException o derivati, che si considera possano avvenire ovunque nel codice.
Per tutte le altre deve valere lo schema indicato sopra (direttiva throws a marcare il metodo, codice cliente che tratta l'eccezione o delega il chiamante a farlo).
lo schema try/catch può essere completato dalla sezione finally: il blocco finally verrà sempre eseguito sia se c'é una eccezione nel blocco try (e quindi il blocco catch relativo all'eccezione generata é eseguito) sia se non si incontrano eccezioni.
Nessun commento:
Posta un commento