Maison  >  Article  >  Java  >  Pourquoi l'appel d'une méthode statique sur une référence nulle ne génère-t-il pas d'exception NullPointerException ?

Pourquoi l'appel d'une méthode statique sur une référence nulle ne génère-t-il pas d'exception NullPointerException ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-04 04:29:01353parcourir

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

Invocation de méthode statique sur des références nulles : pourquoi la surprise

Lorsque l'on travaille avec Java, on rencontre généralement la règle selon laquelle l'invocation d'une méthode sur un La référence null déclenche une NullPointerException. Cependant, considérez l'extrait de code suivant :

<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>

À notre grande surprise, le programme ci-dessus ne génère pas d'exception NullPointerException. Pourquoi est-ce le cas ?

Comprendre les méthodes statiques

La clé pour comprendre ce comportement réside dans la nature des méthodes statiques. Les membres statiques, y compris les méthodes, appartiennent à la classe et non à des instances spécifiques. Ils sont accessibles directement via le nom du type sans avoir besoin d'une référence d'objet.

Dans l'exemple ci-dessus, test() est une méthode statique. Lorsqu'il est invoqué à l'aide de NULL.test(), Java traite cela comme invoquant Why.test() car la référence réelle de l'objet n'est pas pertinente.

Accès statique via des références d'objet (à éviter !)

Bien que Java permette d'accéder aux membres statiques via des références d'objet, cette pratique est fortement déconseillée. Cela peut prêter à confusion, car cela masque la sémantique réelle de l'accès aux membres statiques.

Ce qui compte dans l'accès aux membres statiques

Lors de l'accès à un membre statique via une référence d'objet expression, seul le type déclaré de la référence compte. Cela implique que :

  • La référence étant nulle ne lève pas d'exception car aucune instance n'est nécessaire.
  • Le type d'exécution de l'objet n'affecte pas l'invocation ; aucune répartition dynamique ne se produit.

Considérations connexes

  • Java ne permet pas de remplacer les méthodes statiques car elles sont liées à la classe, pas instances.
  • L'accès aux membres statiques via des références d'instance doit être évité pour plus de clarté et pour éviter d'éventuels malentendus.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn