我很惊讶这个代码在理想情况下抛出空指针异常
的原因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 :(得分: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());
}