2

次のコードがあります。

public class StaticKindOfThing {
    static int a =getValue();
    static int b = 10;
    public static int getValue()
    {
        return b;
    }

    public static void main (String []args)
    {
        System.out.println(a);
    }
}

デフォルト変数が 0 に設定されていることは承知していますが、実行時には発生しませんか? 上記のコードから、実行前に 0 へのデフォルトの初期化が行われるように見えます。それ以外の場合、getValue はコンパイル エラーまたは値が見つからない実行時例外を発生させます。だから私の質問はです。変数static int b = 10;はコンパイル時に 0 のデフォルト値を取得しますか?

4

2 に答える 2

1

いいえ、あなたが提供した値、別名 10 を取得します。

あなたの場合でも、次のように書いています。

static int a;

結果は になります0。あなたは何の価値も与えていないからです。

static時々、次のようなブロックを書くことができます:

static {
  //...
}

クラスの開始前にこのブロックが最初に実行されるようにします。

静的イニシャライザ ブロックは、クラスが JVM のような静的変数にロードされるときに 1 回だけ実行されます。

あなたが思うことをするこれを試してください:

public class StaticKindOfThing {

static int a;
static int b = 10;

static{
    a = getValue();
}


public static int getValue()
{
    return b;
}

public static void main (String []args)
 {
    System.out.println(a);
 }
}

出力: 10

于 2013-09-01T12:05:01.323 に答える