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 :
Considérations connexes
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!