2013-07-10 2 views
-5

을 반환 나는 다음과 같은 질문이 있습니다 내가 다음 코드의 출력이자바 마지막으로

try { 
    int a = 0; 
    System.out.println("The method will return " + a); 
    return a; 
} catch (Exception e) { 
    ; 
} 
finally { 
    System.out.println("Finally executed"); 
} 

The method will return 0 
Finally executed 

내 질문이 될 것이라는 점을 알고있다이다 : 어떤 다음 코드를 반환합니까?

int a = 0; 
try { 
    System.out.println("The method will return " + a); 
    return a; 
} catch (Exception e) { 
    ; 
} 
finally { 
    System.out.println("Finally executed"); 
    a = 1; 
    return a; 
} 

즉, 마지막으로 메소드가 호출 된 코드 전후에 실행됩니까?

+18

* "내 질문은 다음과 같습니다."* 시도 할 때 어떤 일이 발생 했습니까? –

+0

'finally'는 'try-catch' 시퀀스의 모든 것 다음에 실행되어 필수적인 정리 작업을 수행합니다.따라서 'a'의 값은 결국 1이되고, 예외가 발생하면 0을 반환합니다. –

답변

3

finally 블록은 return 문 다음에 실행됩니다. 이 시간이 지나면 a 값을 읽고 변경하면 더 이상 반환 값이 변경되지 않으므로 메서드는 0을 반환합니다.

반환 값을 변경하려면 finally 블록에 return 문을 추가하면됩니다. 이것은 이제 두 개의 return 문이 실행되기 때문에 실제로 권장되지 않습니다. 이는 대부분의 사람들에게 직관력이 없기 때문입니다.

... 
finally { 
    System.out.println("Finally executed"); 
    return 1; 
} 
+0

반환 값을 잘못 입력했습니다 ... 어쨌든 이것은 "호기심"이었습니다. 나는 결코 쓰지 않습니다. 이 코드는 ... –

2

출력 방법은 이전과 같습니다. 반환 후 a을 할당하면 눈에 띄는 효과가 없습니다. 즉, 호출자는 0을 반환 값으로받습니다. try 블록이 던지지 않기 때문에 마지막으로 return에 도달 할 수 없습니다.

finally 블록은 반환 값이 계산 된 후 수신기가 값을 반환하기 전에 실행됩니다.

대신 원시,하지만의 변경 가능한 객체 반환하면 대답이 변경됩니다

:

static int[] test() { 
    int[] a = new int[1]; 
    try { 
     System.out.println("The method will return [" + a[0] + "]"); 
     return a; 
    } catch (Exception e) { 
     ; 
    } finally { 
     System.out.println("Finally executed"); 
     a[0] = 1; 
    } 
    return a; 
} 
: 어떤, 당신은 finally 블록에서 수행하는 것이, 함수의 호출자에게 볼 것이다 경우, 돌연변이를

위의 경우 int[] {0}이 반환되지만 발신자는 int[] {1}이됩니다.

참고 : 악의적이라고 생각하면 아마도 옳을 것입니다.

0

예외가 없거나 finally 문 (1) 다음에 오는 것을 반환하면 0을 반환합니다. catch가 catch (예외)를 throw하면 아무런 값도 반환하지 않지만 finally 문이 실행되므로주의하십시오.

0

finally 블록은 호출자에게 반환 제어 전에 실행됩니다.

0

출력은 return 문에 디버거를 넣어 경우

The method will return 0 
Finally executed 

발신자가 0

로 값을 얻을 수 있습니다. a의 값을 변경해도 반환 값에 아무런 영향을주지 않는 이유를 쉽게 알 수 있습니다.

관련 문제