finally 문이 실행되지 않는 상황은 최소한 두 가지가 있습니다.
(1) try 문이 실행되지 않습니다. try 문 이전에 return이 반환되면 finally 문이 실행되지 않습니다. 이는 또한 finally 문이 실행되기 위한 필요조건이지만 충분조건은 아니라는 것을 보여줍니다. 해당 try 문을 실행해야 합니다.
(2) try block|catch 블록에 System.exit(0)과 같은 문이 있습니다. System.exit(0)은 JVM을 종료합니다. JVM이 중지되어도 모든 것이 종료됩니다. 물론 finally 문은 실행되지 않습니다.
try-catch-finally에서 return이 finally를 만나면 return은 finally에 대해 유효하지 않습니다. 즉:
1. try catch 블록에서 반환이 이루어지면 finally도 실행됩니다.
2. finally의 return 문은 try catch 블록에 있는 return 문의 효과를 덮어씁니다.
결론: return 문이 반드시 함수를 종료하는 것은 아닙니다. return이 실행되면 return 이후의 값이 반환 값 변수에 복사됩니다.
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); } }
출력:
try …… finnaly occured mian b= 2
결론: 예외가 없으면 try에서 반환될 때까지 try에서 코드 블록을 실행하고 finally에서 코드 블록을 실행한 후 try Execute로 반환합니다. 반품. 종료 기능.
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); } }
출력:
ArithmeticException occured finnaly occured 0 mian b= 3
결론: try에 예외가 있으면 예외 문에서 catch로 캡처한 예외 코드 블록으로 점프한 후 finally를 실행하고 try{}catch{}에서 빠져나옵니다. 마지막으로{} 아래쪽으로 계속 실행되고 try의 후속 문은 실행되지 않습니다.
위 내용은 Java의 finally 문의 예에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!