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