7

java.util.Calendar次のコードは、クラスを使用して取得した現在の年から値 (この場合はデモンストレーションのためだけに 10) を単純に減算します。

public final class Test
{   
    private static final Test TEST = new Test();
    private static final int YEAR = Calendar.getInstance().get(Calendar.YEAR);
    private final int eval=YEAR - 10;

    public static void main(String[] args)
    {
        System.out.println("Evaluation "+TEST.eval);
    }
}

このコードは 2003 年 (現在の年 - 10) を表示するはずですが、代わりに-10. 定数YEARが初期化されていないと思います。この場合、なぜこれが起こるのですか?

4

4 に答える 4

5

そうではないためstatic、このフィールドを使用するにはオブジェクトを作成する必要があります! (または静的に変更します)

試す:

public final class Test
{   
    private static final Test TEST = new Test();
    private static final int YEAR = Calendar.getInstance().get(Calendar.YEAR);    
    private final int eval=YEAR - 10;

    public static void main(String[] args)
    {
        Test t = new Test();
        System.out.println("Evaluation "+t.eval);
    }
}
于 2013-04-22T23:33:32.043 に答える
5

これは、初期化Testする前に初期化しているために発生します。YEARつまり、(暗黙の) コンストラクターに移動し、値を持つ前に初期化evalします (したがって、デフォルトは 0 になります)。YEAR-10YEAR

コメントに示されているように、初期化で YEAR と TEST の順序を変更するだけでうまくいきます。

于 2013-04-22T23:49:36.720 に答える
1

静的evalにすると動作します。静的にしたくない場合は、メイン メソッドで計算を行います。

于 2013-04-22T23:36:25.923 に答える