1

Javaの静的についてほとんど質問がありません

  1. 非静的クラスに静的ブロックを含めることはできますか??その(非静的)クラスのオブジェクトが他のクラスで初期化された場合、静的ブロックは実行されますか??

  2. 静的ブロックと変数( int a = 3) および main() メソッドを持つ静的クラスがあり、それが実行される場合、変数の初期化が最初に行われますか、それとも静的ブロックの実行ですか?私は静的ブロックがメインの前に実行されることを知っています() 方法。

4

5 に答える 5

3

こちらをご覧くださいhttp://docs.oracle.com/javase/tutorial/java/javaOO/initial.html

仕様では静的初期化子と呼ばれています。このコードは、JVM がクラスをロードするときに実行されます。ランタイム システムは、静的初期化ブロックがソース コードに現れる順序で呼び出されることを保証します。

非静的内部クラスで静的コードを使用することはできません

    public class MyClass {

    static {
        System.out.println("static code from nonstatic class");
    }

    class In {
        /* it will not compile
        static {

        }
        */
    }
    static class In2 {
        static {
         System.out.println("static code from static inner class");
        }
    }
    public static void main(String[] args) {
        MyClass c = new MyClass();
    }
}

呼び出し順序の詳細については、Java® 言語仕様の詳細な初期化手順を参照してください。単純に、静的ブロックはソース コードに表示される順序で実行されます。

于 2013-07-10T06:32:17.703 に答える
1

質問 2 については、Java 言語仕様 §12.4.2の「詳細な初期化手順」の特にステップ 9 に答えがあります。

次に、[...] クラスのクラス変数初期化子と静的初期化子を実行します [...] 単一のブロックであるかのように、テキスト順に実行します。

つまり、static {}静的フィールドのブロックと初期化式は、ソース コードに表示される順序で実行されます。静的ブロックがフィールド宣言の前にある場合は、最初に実行されます (通常、フィールドのデフォルト値が表示されます)。nullまたは 0)、静的ブロックがフィールド宣言の後にある場合は、2 番目に実行されます (初期化式によって割り当てられた値が表示されます)。

于 2013-07-10T07:57:40.957 に答える
1

静的クラスと通常のクラスを使用しても、使用できるプログラミング構造には影響しませんが、クラスが周囲のクラスのインスタンス フィールド/メソッドにアクセスできるかどうかを制御するだけです。

于 2013-07-10T06:33:03.730 に答える