2

かなり錆びていますが、このように書かれたコードを見たことがないことは確かです。これはJavaアソシエイト試験の模擬問題です.10行目の「静的」がgo()メソッドに接続されているかどうか誰か教えてもらえますか?? そして主に、なぜ出力が xycg なのか ???

public class testclass {

    testclass() {
        System.out.print("c ");
    }

    { 
        System.out.print("y ");
    } 

    public static void main(String[] args) { 
        new testclass().go(); 
    } 

    void go() {
        System.out.print("g ");
    } 

    static {
        System.out.print("x ");
    }

} 
4

6 に答える 6

3

10 行目の「static」が go() メソッドに接続されているかどうか教えてください??

その go メソッドには関係ありません。これは、静的初期化ブロックと呼ばれます。

出力が xycg なのはなぜですか ???

以下はJavaでの実行順序です

  1. クラスのロード時に、静的フィールド/初期化ブロックが実行されます。
  2. オブジェクトの作成時に、JVM はフィールドをデフォルトの初期値 (0、false、null) に設定します。
  3. オブジェクトのコンストラクターを呼び出します (ただし、コンストラクターの本体はまだ実行しないでください)。
  4. スーパークラスのコンストラクターを呼び出す
  5. 初期化子と初期化ブロックを使用してフィールドを初期化する
  6. コンストラクタ本体を実行する
于 2014-04-29T08:47:54.903 に答える
2

クラスがロードされたstaticときに実行される静的初期化ブロックがあります。

http://docs.oracle.com/javase/tutorial/java/javaOO/initial.html

于 2014-04-29T08:48:36.707 に答える
1

インデントが不十分なコードです。上記のクラスでは、

  1. コンストラクタ
  2. クラスブロック
  3. 静的ブロック
  4. そして、と呼ばれるメソッドgo()

class testclass { 

/**
 * Constructor, which gets called for every new instance, after instance block
 */
testclass() { 
         System.out.print("c "); 
} 

/**
 * This is instance block which gets called for every new instance of the class
 * 
 */
{ 
  System.out.print("y "); 
} 

public static void main(String[] args) { 
    new testclass().go(); 
} 

/**
 * any method
 */
void go() { 
         System.out.print("g "); 
} 

/**
 * This is static block which is executed when the class gets loaded
 * for the first time
 */
static { 
      System.out.print("x "); 
} 

} 
于 2014-04-29T08:47:33.747 に答える
0

静的初期化ブロックです。したがって、そのクラスのオブジェクトを作成すると、コンストラクターの前であっても、最初に静的初期化ブロックが実行されます。

于 2014-04-29T08:49:02.893 に答える
0

クラスがロードされると、静的ブロックが最初に初期化されます。それがあなたがo/pを得る理由です

x as the first output
于 2014-04-29T08:48:52.067 に答える
0
static { System.out.print("x "); }

これは静的初期化ブロックです。これは、クラスのロード時に呼び出されます。したがって、最初の呼び出し。

{ System.out.print("y "); } 

これは非静的初期化ブロックです。オブジェクトが作成されると、最初に呼び出されます。

testclass() { System.out.print("c "); }

これがコンストラクタです。すべての初期化ブロックが実行された後、オブジェクト作成のプロセスで実行されます。

最後に、

  void go() { System.out.print("g "); } 

通常のメソッド呼び出し。最後に実行すること。

詳細については、http://docs.oracle.com/javase/specs/jls/se7/html/jls-12.html を参照してください

于 2014-04-29T08:53:02.883 に答える