Maison > Java > javaDidacticiel > le corps du texte

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

DDD
Libérer: 2024-11-03 03:57:30
original
783 Les gens l'ont consulté

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

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

En Java, il est communément admis que l'appel d'une méthode sur une référence d'objet nulle déclenche une NullPointerException. Toutefois, cette exception n'est pas levée lorsqu'une méthode statique est invoquée sur une référence nulle. Voyons pourquoi.

Définition et accès aux méthodes statiques

Une méthode statique est associée à la classe, plutôt qu'à une instance spécifique. Il peut être invoqué directement à l'aide du nom de la classe, sans nécessiter de référence d'objet.

Comportement inattendu

L'exemple de code ci-dessous illustre le comportement inattendu :

<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(); // DOES NOT Throw NullPointerException
  }

}</code>
Copier après la connexion

Raison sous-jacente

La clé pour comprendre pourquoi ce code fonctionne réside dans le concept d'accès aux membres statiques. Les membres statiques, y compris les méthodes, appartiennent au type et ne nécessitent pas d'accès à une instance d'objet.

Invocation appropriée des méthodes statiques

Les méthodes statiques doivent être invoquées directement en utilisant le nom de la classe, comme suit :

<code class="java">Why.test(); // Correct way to invoke static method</code>
Copier après la connexion

Accès non statique via une référence d'objet

Bien que Java permette d'accéder aux membres statiques via des références d'objet, cette pratique est fortement découragé. Cela peut prêter à confusion, car cela implique l'accès à un membre d'instance, ce qui est incorrect.

Implications de l'accès à la référence d'objet

Lors de l'accès à un membre statique via une référence d'objet , ce qui suit se produit :

  • La vérification des références nulles est contournée, car les membres statiques ne nécessitent pas d'instance.
  • Le type d'exécution spécifique de l'objet (s'il existe) n'est pas pertinent , qui diffère de l'accès aux membres de l'instance.

Questions connexes

La compréhension de ce concept explique également pourquoi Java interdit la substitution de méthodes statiques et pourquoi appeler une méthode statique via une instance n'est pas une erreur pour le compilateur Java.

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal