Ho un programma come segue:try/finally senza valore delle catture e ritorno
public class Main {
public static void main(String[] args)throws Exception
{
int res = test();
System.out.println("after call , res = " + res) ;
}
public static int test()throws Exception
{
try
{
return 10/0;
}
finally
{
System.out.println("finally") ;
}
}
}
dopo l'esecuzione di sopra del programma, seguente risultato ha visto in consolle:
finally
Exception in thread "main" java.lang.ArithmeticException:/by zero
at Main.test(Main.java:17)
at Main.main(Main.java:7)
questo comportamento è normale perché eccezione generata al metodo principale.
Poi modificare il codice come segue:
public class Main {
public static void main(String[] args)throws Exception
{
int res = test();
System.out.println("after call , res = " + res) ;
}
public static int test()throws Exception
{
try
{
return 10/0;
}
finally
{
System.out.println("finally") ;
return 20;
}
}
}
Quando viene eseguito sopra il programma che ho visto seguente risultato in consolle:
finally
after call , res = 20
La mia domanda relativa al secondo formato. Perché quando ritorni finalmente in blocco, eccezione non generata al metodo principale?
@Tunaki Non quello. –
Questo forse: http://stackoverflow.com/q/48088/1743880? – Tunaki
Si prega di dare un'occhiata: http://stackoverflow.com/questions/48088/returning-from-a-finally-block-in-java – Rehman