8

constantここで、ブロック内を印刷するときにプログラムを 実行しましたが、実行されmain staticません..しかし、実行するときにJavaでstat重要なことはありますか..?static final説明してください

package com.test.doubt;`

class Doubt {

  public static final int constant = 123;
  public static int stat = 123;

  static {
    System.out.println("Static Block");
  }
}

public class MyProgram {

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

2 に答える 2

20

定数であるDoubtという理由だけで、コードはクラスを初期化していません。その値はコンパイル時に組み込まれます。コンパイル後に削除することもでき、プログラムは引き続き実行されます。Doubt.constant MyProgramDoubt.class

走る

javap -c com.test.doubt.MyProgram

コンパイル後にコードがどのように表示されるかを正確に確認します。

定数式を構成するものについては、JLSのセクション15.28を参照してください。たとえば、これは定数のままです。

public static final String FOO = "Foo";

そして、これらすべてがそうなるでしょう:

public static final String FOO = "Foo";
public static final String BAR = "Bar";
public static final String FOOBAR = FOO + BAR;

...しかし、これはそうではありません

public static final String NOT_A_CONSTANT = "Foo".substring(0, 1);
于 2012-08-08T11:47:16.160 に答える
11

static final int、その値としてコードに直接コンパイルされます。つまり、JVM は以下を認識して実行しています。

System.out.println(123);

そして、適切な名前Doubtのクラスにまったく触れていません(これは、この方法で定数を指定しないための引数です。ところで、その値を変更すると、すべての参照クラスを再コンパイルする必要があります)

于 2012-08-08T11:48:08.463 に答える