我最近被问到下一个代码的输出是什么:
class MyClass {
static void printMessage() {
System.out.println("Hello from static");
}
public static void main(String[] args) {
MyClass instance = null;
instance.printMessage();
}
}
输出
"Hello from static" without compile or runtime errors.
我知道可以使用类的名称来调用静态方法,例如 MyClass.staticMethod(),而且我知道你可以在非静态方法中调用静态方法,但是上面的代码对我来说很困惑。任何人都可以向我解释如何使用null实例调用静态方法?感谢。
答案 0 :(得分:0)
当instance.printMessage();
静态为printMessage()
instance.MyClass.printMessage();
真正的代码是:
class MyClass{
static void printMessage(){
System.out.println("Hello from static");
}
public static void main(String[] args){
MyClass instance = null;
instance.printMessage();
}
}
我们可以使用想象力让它更容易理解:
class MyClass{
static void printMessage(){
System.out.println("Hello from static");
}
public static void main(String[] args){
MyClass instance = null;
instance.MyClass.printMessage();
}
}
答案 1 :(得分:0)
您可能会在此行instance.printMessage();
上发出警告
来自类型的静态方法printData() 应以静态方式访问CallingStaticMethodOnNullReference
因此,即使在使用或不使用Class name
的情况下调用方法进行编译,编译器也会在Class name
文件中添加.class
和方法调用,如MyClass.printMessage();
。这就是为什么你没有得到任何例外。如果您从编译器的角度思考,有时代码操作会更好。