>  기사  >  Java  >  finally 블록이 Java에서 반환된 변수를 재정의합니까?

finally 블록이 Java에서 반환된 변수를 재정의합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-12 09:15:02338검색

Does the Finally Block Override a Returned Variable in Java?

Finally Block이 반환된 변수에 미치는 영향: 예외 이해

Java에서 finally 블록은 try-catch 블록에 관계없이 코드 실행을 보장합니다. 결과 또는 갑작스러운 종료. 그러나 이러한 블록이 반환된 변수와 어떻게 상호 작용하는지 이해하는 것이 중요합니다.

다음 클래스를 고려하세요.

public class Test {

    private String s;

    public String foo() {
        try {
            s = "dev";
            return s;
        }
        finally {
            s = "override variable s"; // This change doesn't affect the returned value
            System.out.println("Entry in finally Block");
        }
    }

    public static void main(String[] xyz) {
        Test obj = new Test();
        System.out.println(obj.foo()); // Prints "dev"
    }
}

예기치 않은 동작 디코딩

foo() 메서드가 호출되면 finally 블록이 실행되기 전에 반환된 값이 결정됩니다. try 블록은 반환 값이 되는 "dev"를 s에 할당하는 return 문으로 완료됩니다. finally 블록 내에서 s에 대한 후속 변경 사항은 반환된 값에 반영되지 않습니다.

규칙 이해

Java 언어 사양에 따르면 다음과 같이 try 블록을 완성합니다. return 문이 갑자기 종료됩니다. finally 블록은 갑작스런 종료 후에 실행되며, 정상적으로 완료되면 try 문도 갑자기 종료됩니다. 따라서 finally 블록의 return 문은 try 블록 내에서 결정된 반환 값을 재정의합니다.

변경 가능한 개체와 변경 불가능한 개체

이 동작은 참조하는 객체가 아니라 s의 실제 값입니다. s가 가변 객체(예: 배열 또는 사용자 정의 클래스)에 대한 참조이고 해당 내용이 finally 블록에서 변경된 경우 해당 변경 사항은 반환된 값에 영향을 미칩니다. 그러나 String 객체는 불변이므로 해당 값을 변경할 수 없습니다.

결론

요약하자면 finally 블록은 try 블록에서 반환된 변수를 수정할 수 없습니다. 반환된 값은 finally 블록이 실행되기 전에 결정되며 finally 블록 내의 변수 값에 대한 후속 변경 사항은 반환된 결과에 영향을 주지 않습니다.

위 내용은 finally 블록이 Java에서 반환된 변수를 재정의합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.