Null 참조에 대한 정적 메소드 호출: 놀라운 이유
Java로 작업할 때 일반적으로 Null 참조에 대한 메소드 호출 규칙을 접하게 됩니다. null 참조는 NullPointerException을 트리거합니다. 그러나 다음 코드 조각을 고려하십시오.
<code class="java">public class Why { public static void test() { System.out.println("Passed"); } public static void main(String[] args) { Why NULL = null; NULL.test(); // Doesn't throw NullPointerException } }</code>
놀랍게도 위 프로그램은 NullPointerException을 발생시키지 않습니다. 왜 그럴까요?
정적 메서드 이해
이 동작을 이해하는 열쇠는 정적 메서드의 특성에 있습니다. 메서드를 포함한 정적 멤버는 특정 인스턴스가 아닌 클래스에 속합니다. 객체 참조 없이 유형 이름을 통해 직접 액세스할 수 있습니다.
위 예에서 test()는 정적 메서드입니다. NULL.test()를 사용하여 호출하면 실제 객체 참조가 관련이 없기 때문에 Java는 이를 Why.test() 호출로 처리합니다.
객체 참조를 통한 정적 액세스(피하세요!)
Java에서는 객체 참조를 통해 정적 멤버에 액세스하는 것을 허용하지만 이러한 방식은 권장되지 않습니다. 이는 정적 멤버 액세스의 실제 의미를 숨기기 때문에 혼란을 초래할 수 있습니다.
정적 멤버 액세스에서 중요한 점
객체 참조를 통해 정적 멤버에 액세스하는 경우 표현식에서는 선언된 참조 유형만 중요합니다. 이는 다음을 의미합니다.
관련 고려 사항
위 내용은 Null 참조에서 정적 메서드를 호출해도 NullPointerException이 발생하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!