为什么类中的静态方法在其对象为空时不给出Null指针异常

时间:2017-05-04 17:31:31

标签: java static

我很惊讶这个代码在理想情况下抛出空指针异常

的原因
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());
 }
}

1 个答案:

答案 0 :(得分:0)

当调用静态方法时,类型引用与实例无关,因此obj.foo()和Test.foo()会被解析为同一个东西。

最佳实践:应该静态访问静态成员

  

虽然可以从类实例访问 static 成员,   这是不好的形式,并被大多数人认为是误导,因为它   向你的代码的读者暗示有一个实例   每个类实例的成员。

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

建议代码:

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