2

静的メソッドがコンパイル時に解決される場合、オブジェクトインスタンスはどのようにして静的メソッドを呼び出すことができますか?

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クラスを実行した後、出力は次のようになります。

クラスStaticCallは、クラスMyMainClassの静的メソッドを呼び出します

これはStaticCallメインです

静的フィールドとメソッドはClassオブジェクトに属しているため、インスタンスはどのようにして静的メソッドを呼び出すことができますか?また、Classオブジェクトはいつ作成されますか、それはそのフィールドまたはメソッドのいずれかに最初にアクセスしたときですか?

4

3 に答える 3

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);
于 2012-11-14T16:35:25.030 に答える
4
 h.main(arr);         //How is an instance able to call a static method?

これは、のショートカットMyMainClass.main(arr)、つまり静的タイプのですh。使用法はしばしば眉をひそめ、ほとんどのIDEはインスタンスの代わりにタイプを使用することを推奨します。

これはコンパイル時に発生するため、hnullになる可能性があります

于 2012-11-14T16:36:20.113 に答える
1

静的メソッドを呼び出すことclassname.staticMethodinstance.staticMethodinstance.staticMethod内部的に呼び出すこともできますclassname.staticMethod

于 2012-11-14T16:36:22.143 に答える