finally 코드 블록의 실행 상황
1. try에return,finally가 있는데 어떻게 실행합니까
이상 처리에서try나catch를 실행하든finally{}의 코드는 실행됩니다. (특수한 경우를 제외하고는)프로그램이 리턴을 실행하는 것은 현재 함수에 대한 호출을 끝내고 이 함수체를 뛰어넘는 것을 의미하기 때문에, 어떤 문장도 리턴 전에만 실행할 수 있습니다.
public class Test {
public static int testFinally() {
try {
return 1;
} catch (Exception ex) {
return 2;
} finally {
System.out.println("execute finally");
}
}
public static void main(String[] args) {
int result = testFinally();
System.out.println(result);
}
}
실행 결과:
execute finally
1
public class Test {
public static int testFinally() {
try {
return 1;
} catch (Exception ex) {
return 2;
} finally {
System.out.println("execute finally");
return 3;
}
}
public static void main(String[] args) {
int result = testFinally();
System.out.println(result);
}
}
실행 결과:
execute finally
3
return 문장이 반드시 함수의 출구는 아닙니다. return을 실행할 때, return 뒤의 값을 반환값 변수에 복사했을 뿐입니다.
/**
* try/catch return, finally{} 、
*/
public class Test {
public static int testFinally1() {
int result1 = 1;
try {
return result1;
} catch (Exception ex) {
result1 = 2;
return result1;
} finally {
result1 = 3;
System.out.println("execute testFinally1");
}
}
public static StringBuffer testFinally2() {
StringBuffer result2 = new StringBuffer("hello");
try {
return result2;
} catch (Exception ex) {
return null;
} finally {
result2.append("world");
System.out.println("execute testFinally2");
}
}
public static void main(String[] args) {
int test1 = testFinally1();
System.out.println(test1);
StringBuffer test2 = testFinally2();
System.out.println(test2);
}
}
실행 결과:
execute testFinally1
1
execute testFinally2
helloworld
프로그램은return을 실행할 때 먼저 반환값을 지정한 위치에 저장하고finally 블록을 실행하며, 가장 먼저return을 실행합니다.
finally 블록에서 기본 형식의 데이터result1/인용 형식 데이터result2의 값을 바꾸면 자바의 값 전달과 인용 전달과 관련이 있습니다.값 전달에서 형삼과 실삼은 서로 다른 저장 단원을 가지고 형삼의 변화에 실삼의 값에 영향을 주지 않는다.인용 전달에서 전달된 것은 대상의 주소이고 인삼과 실삼의 대상은 같은 저장 단원을 가리키며 인삼의 변화에 영향을 줄 수 있다.
2. finally 코드 블록을 실행하기 전에 방법이 결과를 되돌려주거나 JVM이 종료되면finally 블록의 코드가 실행됩니까//finally가 실행하지 않을 경우
(1)try 문이 실행되지 않았습니다.즉try 코드 블록에 들어가지 않았기 때문에 대응하는finally는 자연히 실행되지 않습니다.
예를 들어try문장 전에return이 되돌아와finally가 실행하지 않습니다.또는 프로그램이 자바에 들어가기 전에 이상이 발생하면 바로 끝납니다.finally 블록도 실행하지 않습니다.
(2) try/catch 블록에 System이 있습니다.exit(0)를 사용하여 JVM을 종료합니다.
System.exit(0)는 JVM을 종료하고 프로그램을 강제로 종료하며finally{}의 코드는 실행되지 않습니다.
참조 자료:
java에서finally 문장이 반드시 실행될지 여부
Java의 매개변수 전송
finally 코드 블록이 실행되지 않는 상황 요약
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.