„Aș dori să vă spun puțin despre cum funcționează excepțiile . Exemplul de mai jos ar trebui să vă ofere o idee aproximativă despre ceea ce se întâmplă:”
class ExceptionExampleOriginal
{
public static void main(String[] args)
{
System.out.println("main begin");
try
{
System.out.println("main before call");
method1();
System.out.println("main after call");
}
catch (RuntimeException e)
{
String s = e.getMessage();
System.out.println(s);
}
System.out.println("main end");
}
public static void method1()
{
System.out.println("method1 begin");
method2();
System.out.println("method1 end");
}
public static void method2()
{
System.out.println("method2");
String s = "Message: Unknown Exception";
throw new RuntimeException(s);
}
}
public class ExceptionExample
{
private static Exception exception = null;
public static void main(String[] args)
{
System.out.println("main begin");
System.out.println("main before call");
method1();
if (exception == null)
{
System.out.println("main after call");
}
else if (exception instanceof RuntimeException)
{
RuntimeException e = (RuntimeException) exception;
exception = null;
String s = e.getMessage();
System.out.println(s);
}
System.out.println("main end");
}
public static void method1()
{
System.out.println("method1 begin");
method2();
if (exception != null) return;
System.out.println("method1 end");
}
public static void method2()
{
System.out.println("method2");
String s = "Message: Unknown Exception";
exception = new RuntimeException(s);
return;
}
}
„Sunt complet pierdut”.
— Bine. Lasă-mă să explic ce se întâmplă.
„În exemplul din stânga, numim câteva metode succesive. În method2
, creăm și aruncăm în mod deliberat o excepție (creăm o eroare).”
„Exemplul din dreapta arată ce se întâmplă”.
„Uită-te la method2
. În loc să creăm o excepție, creăm un RuntimeException
obiect, îl salvăm în variabila statică exception
și apoi ieșim imediat din metodă folosind o return
instrucțiune.”
„În method1
, după apelarea method2
, verificăm dacă există o excepție. Dacă există o excepție, atunci method1
se termină imediat. O verificare ca aceasta este efectuată indirect după fiecare apel de metodă (!) în Java.”
"Wow!"
"Wow este corect."
„În coloana din dreapta, am folosit metoda principală pentru a arăta aproximativ ce se întâmplă atunci când o excepție este capturată folosind un construct try-catch. Dacă nu există nicio excepție, atunci totul continuă să ruleze așa cum era de așteptat. Dacă există o excepție și este același tip specificat în instrucțiunea catch, apoi ne ocupăm de el."
„Ce înseamnă throw
și ce instanceof
înseamnă? ”
"Uită-te la ultima linie: throw new RuntimeException(s);
. Așa creezi și arunci o excepție. Nu vom lucra încă la asta. A fost doar un exemplu."
„Folosim a instanceof B
pentru a verifica dacă obiectul a
este de tipul B
, adică dacă obiectul la care face referire excepția variabilei este o excepție RuntimeException. Aceasta este o expresie booleană.”
— Cred că am înțeles. Aproape.
GO TO FULL VERSION