마지막으로 케이스를 사용하는 시도 캐치를 시도 반환 -자바 시도 캐치 마침내 -
public class Finallyy {
public static void main(String[] args) {
int result = method1();
System.out.println(result);
}
private static int method1() {
int a = 2;
try {
int b = 0;
a = a/a;
System.out.println("try");
return a;
} catch (Exception e) {
System.out.println("caught");
a = 5;
return a;
}
finally {
System.out.println("finally");
a = 10;
return a;
}
}
}
출력 : 코드가
에 수정 된 경우try
finally
10
finally { System.out.println("finally"); a = 10; //return a; }
출력 :
try finally 1
질문은 -
try
블록의 'return a
이'저장되어있는 스택의 일부 개념 [예제가 변경되는 경우, 다음이 시도하거나 catch 블록에 적용이 있는가]이고finally
블록에 'return
'이없는 경우에만 제어가method1()
을 벗어날 때 갑자기 나타 납니까?업데이트 : 솔루션 결론 :
리턴 문이 실행될 때 반환되는 값이 저장됩니다. finally 블록이 완료되면 해당 값이 반환됩니다.
finally 블록은 항상 마지막으로 실행됩니다. 따라서 finally 블록의 반환 값은 try/catch 블록의 다른 반환 값을 오버런합니다. 이러한 이유로 finally 블록에서 예외를 반환하거나 throw하는 것은 매우 나쁜 습관입니다.
원래 질문에 -
finally
블록에 'return
'이없는 경우입니까? 아니. 그건 중요하지 않아.편집 :이 질문 사월 8 요청하고 이미 대한 답변
. 현재 중복으로 표시된이 질문은 나중에 [8 월 15 일]에 요청됩니다. 그러므로 새로운 질문은이 질문이 아니라 중복으로 표시되어야합니다. 그러나 참고 문헌을 공유하면 비슷한 질문이 좋습니다.
예. 귀하의 "스택 개념"이 스택입니다. –
@DavidWallace, a의 값이 스택에 저장되는 것을 의미합니까? 나는 값이 함수 내의 다른 값이 저장되는 것처럼 스택 메모리에 저장된다는 것을 의미합니까? – spiderman
예. 호출 한 메서드는 반환 값을 스택에 저장합니다. 호출하는 메서드는 그것을 팝 아웃합니다. –