> Java > java지도 시간 > finally 블록은 Java에서 메서드의 반환 값에 어떤 영향을 줍니까?

finally 블록은 Java에서 메서드의 반환 값에 어떤 영향을 줍니까?

Linda Hamilton
풀어 주다: 2024-11-09 15:15:02
원래의
375명이 탐색했습니다.

How Does a Finally Block Affect the Return Value of a Method in Java?

Finally Block이 반환 값에 미치는 영향

Java에서 메서드 반환 값에 대한 finally 블록의 동작은 직관적이지 않을 수 있습니다. . 코드 조각을 분석하고 이 현상의 근본적인 이유를 살펴보겠습니다.

다음 코드를 고려하세요.

public class Test {

    private String s;

    public String foo() {
        try {
            s = "dev";
            return s;
        } finally {
            s = "override variable s";
            System.out.println("Entry in finally Block");
        }
    }

    public static void main(String[] xyz) {
        Test obj = new Test();
        System.out.println(obj.foo());
    }
}
로그인 후 복사

실행되면 코드가 "Entry in finally Block"을 인쇄하지만 "를 반환합니다. 개발자." 이는 try 블록에서 return 문의 실행에 따라 반환 값이 결정되기 때문입니다. finally 블록의 's'에 대한 변경 사항은 try 블록이 완료된 후에 발생하므로 반환 값에 반영되지 않습니다.

이 사항은 's' 값의 변경에 적용된다는 점에 유의하는 것이 중요합니다. 객체 자체의 참조는 변경되지 않습니다. 's'가 변경 가능한 객체에 대한 참조이고 해당 내용이 finally 블록에서 변경된 경우 해당 변경 사항은 반환 값에 표시됩니다.

JLS(Java 언어 사양)에 이에 대한 자세한 규칙이 설명되어 있습니다. 섹션 14.20.2의 동작. try-finally 문의 경우 try 블록과 finally 블록 모두 return 문이 있으면 finally 블록의 반환 값이 우선합니다. return 문 실행은 블록의 갑작스러운 종료로 간주되기 때문입니다.

요약하자면, 메소드의 반환 값은 try 블록 내의 return 문에 의해 결정됩니다. 값이나 객체 수정을 통해 finally 블록의 변수에 대한 변경 사항은 finally 블록에 return 문도 포함되어 있지 않는 한 반환 값에 영향을 주지 않습니다.

위 내용은 finally 블록은 Java에서 메서드의 반환 값에 어떤 영향을 줍니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿