"Vorrei parlarvi un po' di come funzionano le eccezioni . L'esempio seguente dovrebbe darvi un'idea approssimativa di cosa succede:"
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;
}
}
"Sono totalmente perso."
"Va bene. Lascia che ti spieghi cosa sta succedendo."
"Nell'esempio a sinistra, chiamiamo alcuni metodi in successione. In method2
, creiamo deliberatamente e lanciamo un'eccezione (creiamo un errore)."
"L'esempio a destra mostra cosa sta succedendo."
"Guarda method2
. Invece di creare un'eccezione, creiamo un RuntimeException
oggetto, lo salviamo nella variabile statica exception
e poi usciamo immediatamente dal metodo usando un'istruzione return
."
"In method1
, dopo aver chiamato method2
, controlliamo se c'è un'eccezione. Se c'è un'eccezione, method1
termina immediatamente. Un controllo come questo viene eseguito indirettamente dopo ogni (!) Chiamata al metodo in Java."
"Oh!"
"Wow è giusto."
"Nella colonna di destra, ho usato il metodo main per mostrare approssimativamente cosa succede quando viene rilevata un'eccezione usando un costrutto try-catch. Se non c'è un'eccezione, allora tutto continua a funzionare come previsto. Se c'è un'eccezione e è lo stesso tipo specificato nell'istruzione catch, quindi lo gestiamo."
"Cosa significa throw
e instanceof
significa? "
"Guarda l'ultima riga: throw new RuntimeException(s);
. Questo è il modo in cui crei e lanci un'eccezione. Non ci lavoreremo ancora. Era solo un esempio."
"Usiamo a instanceof B
per verificare se object a
è di tipo B
, cioè se l'oggetto a cui fa riferimento la variabile exception è una RuntimeException. Questa è un'espressione booleana."
"Credo di aver capito. Quasi."
GO TO FULL VERSION