Il existe au moins deux situations dans lesquelles l'instruction final ne sera pas exécutée :
(1) L'instruction try n'est pas exécutée si return est renvoyée avant l'instruction try, l'instruction enfin ne sera pas exécutée. Cela montre également que la condition nécessaire mais non suffisante pour que l'instruction final soit exécutée est la suivante : l'instruction try correspondante doit être exécutée.
(2) Il y a une instruction comme System.exit(0); dans le bloc try block|catch. System.exit(0) termine la JVM de la machine virtuelle Java Même la JVM est arrêtée et tout est terminé. Bien sûr, l'instruction final ne sera pas exécutée.
Dans try-catch-finally, lorsque return rencontre finalement, return n'est pas valide pour finalement, c'est-à-dire :
1. Lorsque le retour est effectué dans le bloc try catch, enfin sera également exécuté.
2. L'instruction return dans final écrasera l'effet de l'instruction return dans le bloc try catch.
Conclusion : L'instruction return n'est pas nécessairement la sortie de la fonction. Lorsque le return est exécuté, la valeur après le return est simplement copiée dans la variable de valeur de retour.
class Exc{ int a; int b; } public class Except { @SuppressWarnings("finally") static int compute (){ Exc e = new Exc(); e.a = 10; e.b = 10; int res = 0 ; try{ res = e.a / e.b; System.out.println("try ……"); return res + 1; }catch(NullPointerException e1){ System.out.println("NullPointerException occured"); }catch(ArithmeticException e1){ System.out.println("ArithmeticException occured"); }catch(Exception e3){ System.out.println("Exception occured"); }finally{ System.out.println("finnaly occured"); } System.out.println(res); return res+3; } public static void main(String[] args){ int b = compute(); System.out.println("mian b= "+b); } }
Sortie :
try …… finnaly occured mian b= 2
Conclusion : s'il n'y a pas d'exception, exécutez le bloc de code en essayant jusqu'à ce que Le return in try exécute ensuite le bloc de code enfin. Après l'exécution finale, return pour essayer d'exécuter return. Fonction de sortie.
class Exc{ int a; int b; } public class Except { @SuppressWarnings("finally") static int compute (){ Exc e = new Exc(); // e.a = 10; // e.b = 10; int res = 0 ; try{ res = e.a / e.b; System.out.println("try ……"); return res + 1; }catch(NullPointerException e1){ System.out.println("NullPointerException occured"); }catch(ArithmeticException e1){ System.out.println("ArithmeticException occured"); }catch(Exception e3){ System.out.println("Exception occured"); }finally{ System.out.println("finnaly occured"); } System.out.println(res); return res+3; } public static void main(String[] args){ int b = compute(); System.out.println("mian b= "+b); } }
Sortie :
ArithmeticException occured finnaly occured 0 mian b= 3
Conclusion : S'il y a une exception dans try, alors au niveau de l'instruction d'exception, passez au bloc de code d'exception capturé par catch, Après avoir exécuté catch, exécutez enfin, sortez de try{}catch{}finally{} et continuez l'exécution vers le bas, sans exécuter les instructions suivantes dans try.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!