메서드 로컬 내부 클래스는 메서드가 끝난 후에도 여전히 메서드 로컬 내부 클래스의 인스턴스가 활성화되어 있기 때문에 로컬 변수에 액세스 할 수 없습니다. 그러나 지역 변수가 사라지면 지역 변수는 사라집니다. 메서드 로컬 내부 클래스가 최종 로컬 변수에 액세스 할 수 있다는 것을 알았습니다.이 메서드가 끝난 후에도 최종 로컬 변수가 아직 살아 있는지 여부를 알 수 있습니까?Java의 최종 로컬 변수의 범위
답변
일종의. Java 익명 내부 클래스는 "클로저"처럼 동작합니다. 즉, 현재 로컬 상태를 "닫습니다". 그러나 Java는 이러한 클래스를 최종 변수 주변에서만 닫을 수 있습니다. 그렇지 않은 경우 변수의 로컬 상태가 변경 될 수 있지만 내부 클래스에 유지되는 버전은 변경되지 않으므로 "만료 된"인스턴스에 액세스하게됩니다. 이것은 프로그래머에게 혼란 스러울 수 있습니다.
대신 Java에서는 변수 재 지정이 아닌 메소드를 통해 인스턴스가 변경 가능성을 처리해야합니다. 이로 인해 명확성이 향상되고보다 간단한 디버깅이 가능합니다. Java가 수행하는 이유에 대한 자세한 내용은 this answer을 참조하십시오.
클래스에 여전히 변수에 대한 참조가 있으므로 질문에 대한 대답은 예입니다. 내부 클래스가 변수의 소유권을 양도 할 때까지 해당 인스턴스가 가비지 수집되지 않습니다.
* "이것은 프로그래머에게 혼란 스러울 수 있습니다."* - 더 이상 요점은 더 이상 폐쇄와 같지 않을 것입니다. 어휘 문맥에 따라 다른 바인딩을 가진 식별자 이름을 가질 수 있습니다. –
@Stephen 충분히 공정하고 좋은 지적입니다. –
아니요. 즉, 사본이 내부 클래스 인스턴스에서 아직 살아 있음을 의미합니다. '최종'은 두 개의 사본이 혼란스럽게 가치에서 벗어나지 않도록합니다.
- 1. Java의 로컬 범위
- 2. 최종 참조 변수의 중요도
- 3. Java의 클래스 변수보다 최종 로컬 변수에 액세스하는 것이 빠릅니까?
- 4. Java의 정적 변수와 정적 변수의 차이점
- 5. PDO 변수의 범위
- 6. JavaScript 변수의 범위
- 7. IO 정의 변수의 범위
- 8. 범위 변수의 셀 캡처
- 9. 제한은 C++ 변수의 범위
- 10. 변수의 중첩/내부 범위
- 11. Java의 변수 범위
- 12. Java의 범위 조회
- 13. Java의 범위 잠금
- 14. 최종 final 변수와 최종 final 변수의 곱셈의 차이점은 무엇입니까?
- 15. 로컬 변수의 MAXRECURSION 값
- 16. 개인 로컬 변수의 밑줄?
- 17. Android Junit 테스트 로컬 최종 변수
- 18. 콜백 함수에 대한 변수의 범위
- 19. mysqli를 사용하여 PHP5에서 변수의 범위
- 20. 메서드에서 선언 된 변수의 범위
- 21. Google지도 : 이벤트 리스너는 변수의 최종 값만 기억합니다.
- 22. 스택의 로컬 범위 레코드
- 23. jQuery 선택기와 로컬 변수의 비교
- 24. 할당되지 않은 로컬 변수의 사용
- 25. 로컬 변수의 어드레스 동작을 반환
- 26. Java의 다중 catch에서 예외 변수의 유형은 무엇입니까?
- 27. Chrome의 개발 도구를 사용하여 로컬 변수의 값을 어떻게 변경합니까?
- 28. 자바 스크립트 변수의 범위 (XUL 관련)
- 29. 라는 이름의 범위 - 바인드 변수의 잘못된 번호
- 30. 함수 범위 정적 변수의 참조를 반환해도 괜찮습니까?
아무도 우연히 질문을 오해하지 않도록 예제를 게시하는 데주의하십시오. 우리는 코더이며, 자바 코드는 훨씬 더 명확하게 알려줄 것입니다. – jmort253
이것이 의미하는 바이며 작동하지 않는다고 생각합니다. http://ideone.com/LNg9w –
@HunterMcMillen 질문은 메소드 - 로컬 클래스에 관한 것이지 다른 메소드에는 관한 것이 아닙니다. – Jeffrey