그림과 같이 먼저 1에 finally이 없으면 return: 가 try 안의 내용을 먼저 실행하고 return한다는 점을 이해해야 합니다. 실행은 되지만 실제 return은 없습니다. 이때 go finally의 문이 실행된 후 return을 실행하여 위의 질문 x1:1처럼 return x++; 1인데 어차피 finally가 실행될 것이기 때문에 즉시 반환되지는 않지만 finally의 문이 먼저 실행된 다음 x3:3을 얻습니다. 그런데 의 핵심은 입니다. finally의 반환 없음, finally의 x에 대한 변경은 이전 반환의 값에 영향을 미치지 않습니다. 이전 반환이 나가는 것은 1이므로 x의 값이 나중에 최종적으로 변경된 다음 반환이 다시 실행되더라도 이전 1이 여전히 반환됩니다. 즉, 나가도 반품은 동일합니다 2. 드디어 반품이 있는 경우. : try가 먼저 실행되고 return이 실행되지만 실제 return은 발생하지 않습니다. 이때 finally가 실행되고 return in finally가 실행되어 직접 반환됩니다.
1. try catch finally에서 반환이 있는 경우 현재 값이 먼저 스택에 저장되지만 즉시 반환되지는 않으며, finally의 명령문은 항상 실행됩니다. 하지만 반환값은 스택에 미리 올려두었기 때문에 여전히 반환값은 1이다. try catch finally에 반환문을 넣으면 순차적으로 다른 실행 결과를 볼 수 있다.
http://m.blog.csdn.net/articl...
그림과 같이 먼저
1에
finally
이 없으면return
:가
try
안의 내용을 먼저 실행하고 return한다는 점을 이해해야 합니다. 실행은 되지만 실제 return은 없습니다. 이때 go finally의 문이 실행된 후 return을 실행하여 위의 질문x1:1
처럼 return x++; 1인데 어차피 finally가 실행될 것이기 때문에 즉시 반환되지는 않지만 finally의 문이 먼저 실행된 다음x3:3
을 얻습니다. 그런데 의 핵심은 입니다. finally의 반환 없음, finally의 x에 대한 변경은 이전 반환의 값에 영향을 미치지 않습니다. 이전 반환이 나가는 것은 1이므로 x의 값이 나중에 최종적으로 변경된 다음 반환이 다시 실행되더라도 이전 1이 여전히 반환됩니다. 즉, 나가도 반품은 동일합니다2. 드디어 반품이 있는 경우. :
try가 먼저 실행되고 return이 실행되지만 실제 return은 발생하지 않습니다. 이때 finally가 실행되고 return in finally가 실행되어 직접 반환됩니다.
채택되길 바랍니다.
코드 흐름
변수 선언
x = 1
이때
return x++
예외를 잡아서x = 2
을 실행했는데x++
의 값이1
인데return
의 액션이 실행되지 않았습니다마침내 실행하고
x = 3
하고return
다시 돌아옵니다.먼저 예외를 던진 다음 x 값(1)을 먼저 반환하면 클래스의 x가 1씩 증가합니다. 저도 초보자입니다.
x++ 연산자를 반환하고 왼쪽을 먼저 반환한 다음 x가 1씩 증가합니다. return ++x는 2를 반환해야 합니다
++X라는 표현의 의미는 X 더하기 1이고, 표현의 값은 X 더하기 1입니다.
X++ 표현식의 의미는 X + 1이지만 표현식의 값은 여전히 X입니다.
1. try catch finally에서 반환이 있는 경우 현재 값이 먼저 스택에 저장되지만 즉시 반환되지는 않으며, finally의 명령문은 항상 실행됩니다. 하지만 반환값은 스택에 미리 올려두었기 때문에 여전히 반환값은 1이다. try catch finally에 반환문을 넣으면 순차적으로 다른 실행 결과를 볼 수 있다.