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 중국어 웹사이트의 기타 관련 기사를 참조하세요!