如何在java中解析对静态方法的调用?

时间:2012-11-14 16:33:02

标签: java static

如果在编译时解析静态方法,那么对象实例如何能够调用静态方法?

class StaticCall
{
    public static void main(String[] args)
    {
        String arr[]={"Class StaticCall","calls static method of class MyMainClass"};

        MyMainClass h=new MyMainClass();
        h.main(arr);         //How is an instance able to call a static method?
        System.out.println("this is StaticCall main");  
    }   

}


class MyMainClass 
{
    public static void main(String[] args){
        System.out.println(args[0]+" "+ args[1]);
    }
}

运行StaticCall类后,输出为

Class StaticCall调用MyMainClass类的静态方法

这是StaticCall main

由于静态字段和方法属于Class对象,实例如何调用静态方法? 同样,何时创建了Class对象,它是否首次访问其中的任何字段或方法?

3 个答案:

答案 0 :(得分:14)

  

实例如何调用静态方法?

没有。试试这个

MyMainClass h = null;
h.main(arr);   

您将看到该实例被忽略,因为它与

完全相同
MyMainClass.main(arr);   

扩展你的例子......如果你有

class AnotherMainClass extends MyMainClass 
{
}

然后以下所有调用相同的方法。

AnotherMainClass amc = null;
amc.main(args);

((AnotherMainClass) null).main(args);

AnotherMainClass.main(args);

MyMainClass mmc = null;
mmc.main(args);

((MyMainClass) null).main(args);

MyMainClass.main(args);

答案 1 :(得分:4)

 h.main(arr);         //How is an instance able to call a static method?

这只是MyMainClass.main(arr)的快捷方式,即h的静态类型。用法经常不受欢迎,大多数IDE会建议您使用类型而不是实例。

由于这是在编译时发生的,h可以为null

答案 2 :(得分:1)

您可以classname.staticMethod甚至instance.staticMethod调用静态方法,instance.staticMethod内部调用classname.staticMethod