try catch finally 문장 블록에return 문장이 존재할 때의 실행 프로세스
public class Test{
public int add(int a,int b){
try {
return a+b;
}
catch (Exception e) {
System.out.println("catch ");
}
finally{
System.out.println("finally ");
}
return 0;
}
public static void main(String argv[]){
Test test =new Test();
System.out.println(" :"+test.add(9, 34));
}
}
옵션:
A、 catch B、 C、finally D、 :43
:43 :43 finally
운행 결과를 이해하지 못하는 학생들은 다음 두 단락의 코드를 인내심을 가지고 보면try catch finally 문장 블록에return 문장이 존재할 때의 운행 절차가 확연히 밝아진다.
Code one:
public abstract class Test {
public static void main(String[] args) {
System.out.println(beforeFinally());
}
public static int beforeFinally(){
int a = 0;
try{
a = 1;
return a;
}finally{
a = 2;
}
}
}
/**output:
1
*/
코드의 운행 결과를 보면'finally'의 문장은try 문장 블록인'return'이후에 실행된 것 같지만, 사실은 그렇지 않다. 실제로'finally'의 문장은'return'이전에 실행된 것이다.그러면 문제가 생겼습니다. 기왕 전에 실행한 이상, 왜 'a' 의 값이 덮어쓰이지 않았습니까?
프로세스 분석:try 문장 블록의return 방법을 실행할 때, 프로그램이 이 일을 할 것입니다. 되돌아올 결과를 임시 창고에 저장한 다음, 프로그램은finally 문장 블록의 프로그램을 실행하지 않습니다. 'a = 2' 를 실행할 때, 프로그램은 a의 값을 덮어쓰지만 임시 창고의 되돌아올 값을 업데이트하지 않습니다.실행이 끝난 후에 메인 프로그램'finally의 프로그램이 실행되었음을 알립니다. 되돌려달라고 요청할 수 있습니다. '라고 알립니다. 이 때 임시 창고의 값을 꺼내서 되돌려줍니다.이제 되돌릴 값은 임시 창고에 저장되어 있음을 분명히 알 수 있을 것이다.
Code two:
public abstract class Test {
public static void main(String[] args) {
System.out.println(beforeFinally());
}
public static int beforeFinally(){
int a = 0;
try{
a = 1;
return a;
}finally{
a = 2;
return a;
}
}
}
/**output:
2
*/
코드 원과는 달리 현재finally 문장 블록에도 리턴 문장이 있습니다. 이 리턴을 실행할 때 임시 창고의 값을 업데이트합니다.마찬가지로finally를 실행한 후에 메인 프로그램에 요청이 돌아왔음을 알리고 임시 창고의 값을 꺼내서 되돌려줍니다.그러므로 반환치는 2이다.
이제 고개를 돌려 처음의 코드를 살펴보자.
public class Test{
public int add(int a,int b){
try {
return a+b;
}
catch (Exception e) {
System.out.println("catch ");
}
finally{
System.out.println("finally ");
}
return 0;
}
public static void main(String argv[]){
Test test =new Test();
System.out.println(" :"+test.add(9, 34));
}
}
프로세스 분석: ① 16행 코드는 문자열 결합이 하나의 전체이기 때문에dd 방법의 연산 결과를 얻어야만 출력할 수 있다.그러므로 D 옵션을 제외합니다.② try와catch 두 문장 블록이 동시에 존재할 때try에 return 문장이 있으면 뒤에 try catch finally 문장 블록 이외의 return 문장은 작용하지 않고 컴파일러도 "Unreachable code"오류를 보고하지 않습니다.여러분은 컴파일러를 열어 보셔도 됩니다.그러므로 B 옵션을 제외합니다.③ try 블록에 런타임 예외가 없으므로 A 옵션을 제외합니다.④ finally 문장 블록의 문장이return 문장보다 먼저 실행되기 때문에 컨트롤러에서'finally 문장 블록'을 출력한 다음return 문장을 실행하여 연산 결과를 되돌려줍니다.마지막으로 메인 프로그램으로 돌아가서 문자열 연결이 출력 '과 43' 을 완성합니다.그러므로 정답은 C다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
검지offer프로그래밍 시험문제 자바 실현--4.두 갈래 나무를 재건하다소경 오빠 제목 설명: 두 갈래 나무의 앞 순서와 중간 순서의 결과를 입력하고 이 두 갈래 나무를 다시 만드십시오.입력한 앞 순서와 중간 순서의 결과에 중복된 숫자가 없다고 가정하십시오.예를 들어 앞 순서 반복 시퀀...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.