1. throw
operatore
Quando un'eccezione viene rilevata da un catch
blocco e fino a quando non viene lanciata alla macchina Java, è solo un oggetto che eredita Exception
(o meglio, Throwable
). L'oggetto eccezione stesso non ha proprietà magiche.
Tutta la logica di come funzionano le eccezioni è solo un modo speciale in cui la macchina Java si comporta quando viene lanciata un'eccezione.
È sempre possibile rilanciare un'eccezione rilevata alla macchina Java. Per fare ciò, è necessario utilizzare l' throw
operatore:
throw exception;
Esempio:
Codice | Uscita console |
---|---|
|
|
In questo codice, abbiamo rilevato un'eccezione, visualizzato un messaggio a riguardo sullo schermo e quindi rilanciato.
Un'eccezione rilanciata non può essere rilevata da altri catch
blocchi nello stesso try
blocco.
2. Le tue eccezioni
A proposito, puoi creare tu stesso un oggetto eccezione: è solo un oggetto il cui tipo è Exception
o una classe che lo eredita. E buttalo.
È più facile di quanto sembri. Esempio:
Codice | Uscita console |
---|---|
|
|
Nell'esempio sopra, abbiamo creato un nuovo oggetto eccezione il cui tipo è RuntimeException
e lo abbiamo lanciato immediatamente usando l' throw
operatore.
Verrà immediatamente catturato dal catch
blocco, poiché RuntimeException eredita Exception
. Il catch (Exception except)
codice rileva gli oggetti eccezione di tutte le classi che ereditano la Exception
classe.
3. finally
parola chiave
Un altro punto importante. A volte un programmatore deve eseguire un'azione indipendentemente dal fatto che si sia verificata un'eccezione nel codice. Ad esempio, supponiamo di aver aperto un file per la scrittura. Il file aperto deve essere chiuso chiamando close()
.
try
{
// Code where an exception might occur
}
catch(ExceptionType name)
{
// Exception handling code
}
finally
{
// Code that must executed no matter what happens
}
Per eseguire queste azioni obbligatorie, finally
è stato aggiunto un altro tipo di blocco ( ) al try-catch
costrutto, creando così il try-catch-finally
costrutto. Sembra così:
Esempio:
FileInputStream source = null;
try
{
source = new FileInputStream("c:\\note.txt");
source.read();
}
catch(Exception except)
{
System.out.println("Caught the exception");
throw except;
}
finally
{
if (source != null)
source.close();
}
Il codice nel finally
blocco verrà eseguito in ogni caso, indipendentemente dal fatto che si sia verificata un'eccezione. Anche se viene generata un'eccezione e non viene rilevata, il finally
blocco verrà comunque eseguito.
A proposito, se non vuoi catturare un'eccezione, ma hai bisogno di un finally
blocco, usa la notazione abbreviata per il try-catch-finally
costrutto: un try-finally
blocco. Assomiglia a questo:
try
{
// Code where an exception might occur
}
finally
{
// Code that must executed no matter what happens
}
GO TO FULL VERSION