1. throw
operator
Când o excepție este capturată de un catch
bloc și până când este aruncată la mașina Java, este doar un obiect care moștenește Exception
(sau mai degrabă, Throwable
). Obiectul excepție în sine nu are proprietăți magice.
Toată logica modului în care funcționează excepțiile este doar un mod special în care mașina Java se comportă atunci când îi este aruncată o excepție.
Puteți oricând să reintroduceți o excepție prinsă la mașina Java. Pentru a face acest lucru, trebuie să utilizați throw
operatorul:
throw exception;
Exemplu:
Cod | Ieșire de consolă |
---|---|
|
|
În acest cod, am prins o excepție, am afișat un mesaj despre aceasta pe ecran și apoi am reintrodus-o.
O excepție reintrodusă nu poate fi prinsă de alte catch
blocuri din același try
bloc.
2. Excepțiile tale
Apropo, puteți crea singur un obiect excepție: este doar un obiect al cărui tip este Exception
sau o clasă care îl moștenește. Și aruncă-l.
E mai ușor decât pare. Exemplu:
Cod | Ieșire de consolă |
---|---|
|
|
În exemplul de mai sus, am creat un nou obiect excepție al cărui tip este RuntimeException
și l-am aruncat imediat folosind throw
operatorul.
Acesta va fi imediat prins de catch
bloc, deoarece RuntimeException moștenește Exception
. Codul catch (Exception except)
prinde obiecte excepție ale tuturor claselor care moștenesc Exception
clasa.
3. finally
cuvânt cheie
Un alt punct important. Uneori, un programator trebuie să efectueze o acțiune, indiferent dacă a apărut o excepție în cod. De exemplu, să presupunem că am deschis un fișier pentru scriere. Fișierul deschis trebuie închis apelând close()
.
try
{
// Code where an exception might occur
}
catch(ExceptionType name)
{
// Exception handling code
}
finally
{
// Code that must executed no matter what happens
}
Pentru a efectua aceste acțiuni obligatorii, un alt tip de bloc ( finally
) a fost adăugat la try-catch
construct, creând astfel try-catch-finally
constructul. Arata cam asa:
Exemplu:
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();
}
Codul din finally
bloc se va executa în orice caz, indiferent dacă a existat o excepție. Chiar dacă o excepție este aruncată și nu este prinsă, finally
blocul se va executa în continuare.
Apropo, dacă nu doriți să prindeți o excepție, dar aveți nevoie de un finally
bloc, utilizați notația scurtă pentru try-catch-finally
construct: un try-finally
bloc. Arata cam asa:
try
{
// Code where an exception might occur
}
finally
{
// Code that must executed no matter what happens
}
GO TO FULL VERSION