2017-05-04 5 views
1

ich mit Konzept überrascht, warum dieser Code funktioniert, wenn es muss im Idealfall Null-Zeiger AusnahmeWarum statische Methode in einer Klasse nicht Null-Zeiger-Ausnahme geben, wenn sein Objekt null ist

public class Test { 
public static String foo(){ 
System.out.println("Test foo called"); 
return ""; 
} 

public static void main(String args[]){ 
Test obj = null; 
System.out.println(obj.foo()); 
} 
} 
+0

Da eine statische Methode keine Instanz muss aufgerufen werden. Es ist an die Klasse gebunden, nicht an irgendeine Instanz. Das heißt, eine statische Methode für eine Instanz aufzurufen, ist eine schlechte Übung, und noch mehr, wenn die Instanz null ist. –

+0

http://stackoverflow.com/questions/24800309/can-we-call-static-method-with-null-object-in-java-if-yes-how ist kein genaues Duplikat, aber es hat eine Menge Gute Antworten für deine Frage. – Lalaland

+0

@Lalaland: Eigentlich ist das * ein passendes Duplikat. Gute Augen, es zu finden. – Makoto

Antwort

0

werfen Wenn eine statische Methode aufrufen, die Typ Referenz ist relevant nicht die Instanz so obj.foo() und Test.foo() werden auf die gleiche Sache gelöst.

Best Practice: statische Mitglieder sollten statisch

zugegriffen werden, während es möglich ist, statische Mitglieder aus einer Klasseninstanz zuzugreifen, ist es schlechte Form, und von den meisten als irreführend, weil es zu sein bedeutet für die Leser Ihres Codes, dass es eine Instanz des Elements pro Klasseninstanz gibt.

https://sonarqube.com/coding_rules#rule_key=squid%3AS2209

zu Code wie dies empfehlen:

public static void main(String args[]) { 
Test obj = null; 
// .... 
System.out.println(Test.foo()); 
} 
Verwandte Themen