return finally 누가 작용하는지
2243 단어 finally
public class TestFinally ...{
public static void main(String[] args) ...{
System.out.print(returnValue());
}
public static int returnValue()...{
int i = 0; // L1
try...{
i = 1; // L2
return i = i + 5; // L3
} finally ...{
i = 2; // L4
}
}
}
returnValue () 방법의 문장 실행 순서는 'L1, L2, L3, L4, L3' 이고 마지막으로try 문장 블록의return 문장을 실행하지만,returnValue () 의 반환 값은 6입니다.finally 문장 블록에서 변수 i에 대한 부여 값이 작용하지 않는 것처럼 보이지만, 실제로 Debug를 실행하면finally 문장 블록을 실행한 후에return 문장으로 돌아갈 때 변수 i의 값이 새 값 2인 것을 발견할 수 있습니다. 그런데 왜return의 값은 6입니까?개인적으로는 L3을 실행할 때마다 실제로return을 실행하지 않고'i=i+5'를 실행했기 때문이라고 분석했다.(이때 i=6) 임시 변수'xTemp = i;'에 i 값을 저장합니다.(xTemp==6), 그리고finally의 "i=2;"를 실행,마지막으로try 문장 블록의return 문장을 실행합니다. 실제로는 "return xTemp;"입니다.
그래서finally 블록을 실행했지만 효과가 없는 것 같습니다.시나리오 2:
public class TestFinally ...{
public static void main(String[] args) ...{
System.out.print(returnValue());
}
public static int returnValue()...{
int i = 0; // L1
try...{
i = 1; // L2
return i = i + 5; // L3
} finally ...{
i++; // L4
return i; // L5
}
}
}
이때returnValue () 방법의 문장 집행 순서는 'L1, L2, L3, L4, L5' 이고 마지막으로finally 문장 블록의return 문장을 집행하며 되돌아오는 값은 7이다.즉try문장 블록의return문장의'i=i+5;'실행되었습니다. 마지막으로finally 문장 블록의return 문장으로 되돌아갑니다.try 문장 블록의return 되돌아오는 기능은 작동하지 않습니다.기사 출처:http://www.diybl.com/course/3_program/java/javajs/2007917/71604.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
finally 반드시 실행합니다 (실례 코드)다음과 같습니다. 출력: 결론: 이상이 없으면try의 코드 블록을try의return까지 실행하고, 이어finally의 코드 블록을finally가 실행된 후try로 돌아가서return을 실행합니다.함수를 종료합니다. ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.