"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Null 참조에서 정적 메서드를 호출해도 NullPointerException이 발생하지 않는 이유는 무엇입니까?

Null 참조에서 정적 메서드를 호출해도 NullPointerException이 발생하지 않는 이유는 무엇입니까?

2024년 11월 12일에 게시됨
검색:653

Why Doesn\'t Invoking a Static Method on a Null Reference Throw a NullPointerException?

정적 메서드 호출 및 Null 참조 이해

일반적인 오해와는 달리 Null 참조에서 (정적) 메서드를 호출하면 다음이 발생하지 않습니다. NullPointerException. 이 동작을 이해하려면 Java의 정적 메서드 개념을 이해하는 것이 중요합니다.

정적 메서드: 공유 리소스

비정적(인스턴스) 메서드와 달리 특정 개체 인스턴스와 연결되어 있으면 정적 메서드는 해당 개체가 속한 클래스에 바인딩됩니다. 유형 수준에서 작동하므로 객체에 액세스할 필요가 없습니다.

정적 메서드 액세스: 유형 표현식을 통해

정적 메서드를 호출하는 적절한 방법 Why.test()와 같은 유형 표현식을 사용하는 것입니다. 이 접근 방식을 사용하면 객체 인스턴스를 포함하지 않고 클래스에서 정적 메서드가 직접 호출됩니다.

함정: 객체 참조 표현식 사용

Java에서는 다음을 통해 정적 멤버에 액세스할 수 있지만 객체 참조 표현식을 사용하는 것은 권장되지 않으며 혼란을 초래할 수 있습니다. 이 접근 방식(Why aNull = null; aNull.test())을 사용할 때 참조의 선언된 유형(이유)에 따라 호출되는 정적 메서드가 결정됩니다.

객체 참조 표현식 사용의 의미

  • Null 검사는 무시됩니다. 개체가 필요하지 않으므로 참조(aNull)에 대한 Null 검사는 관련이 없습니다.
  • 런타임 유형은 무시됩니다. 객체의 실제 런타임 유형(null이 아닌 경우)은 정적 메서드의 디스패치에 영향을 주지 않습니다.

결론

혼란을 피하고 예측 가능성을 보장하려면 항상 유형 표현식을 사용하여 정적 메서드를 호출하십시오. 정확하고 유지 관리 가능한 Java 코드를 작성하려면 정적 멤버의 특성과 해당 액세스 메커니즘을 이해하는 것이 중요합니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3