14

これを明確にしたいと思います。違いは何ですか -

private static int STUDENT_AGE = 18; 

private static final int STUDENT_AGE = 18; 

フィールド内?

Jon Skeetは、「特定のインスタンスとはまったく関係がない」と説明しました。わかりました。では、この場合、finalは正確に何をしますか?

以下のコードは、学生の年齢が静的ファイナルとして割り当てられているために機能しませんか?デフォルトの年齢はまったく上書きできないということですか?次に、デフォルト以外の年齢を指定するコンストラクターを作成することは可能ですか?

private String myName;
private String myAddress;
private int myYearEnrolled;
private String myGender; 
private static final int STUDENT_AGE = 18; 

public Student(String name, String address, int year, String gender) {
    myName = name;
    myAddress = address;
    myYearEnrolled = year;
    myGender = gender; 
}

   public Student(int age)
{
     STUDENT_AGE = age; 
}
4

7 に答える 7

23

static「特定のインスタンスにまったく関係がない」finalことを意味します。つまり、初期化後にこの値を変更することはできず、この値を初期化する必要があります。

finalとを組み合わせると、static定数を作成できます。これはタイプセーフではないため、公的な方法では推奨されなくなりました (たとえば、プライベート コンテキストのマジック ナンバーではまったく問題ありません)。EnumJoshua Blochsの効果的なJavaとこの質問で提案されているように、ポストJava 1.5を使用するか、Java 1.5より前の独自のタイプセーフ列挙型を作成してください。

public static final備考: 約 1 年後にこれを読んで、一般的にフィールドには何も問題がないことを強調する必要があると思いますenums

于 2012-10-09T13:33:53.183 に答える
4
 private static final int STUDENT_AGE = 18;

定数宣言です。値を変更することはできません。

private static int STUDENT_AGE = 18;

これは静的宣言ですが、定数ではありません。値は変更できます。

于 2012-10-09T13:34:33.717 に答える
1

final変数は一度だけ初期化できます。

于 2012-10-09T13:32:44.273 に答える
1

フィールドの修飾子は、一度初期化されるとfinalフィールドの値を変更できないことを示します。

STUDENT_AGE = age;このため、ファイナルでない限り設定できません。

于 2012-10-09T13:33:02.463 に答える
1

簡単に言うと、修飾子 final はその FINAL を意味します。一度定義した値は変更できません。

そして、何も提供されていない場合にデフォルトの年齢を提供したい場合は、変数 STUDENT_AGE の最終修飾子を削除するだけです。@Quoiが言ったこと

于 2012-10-09T13:34:32.000 に答える
-1

final static variables can only be initialized once, but not necessarily at the time of declaration.. But once it is initialized, it's value cannot be changed.. So, you can initialize your final static variable, at the time of declaration or in static block.

private static final int STUDENT_AGE = 20;

or

private static final int STUDENT_AGE;
static {
      STUDENT_AGE = 20;
}

Now, a static variable (also called, class variable), is not specific to any instance. It is shared among all the instances of that class..

See this way, Static variables are loaded into memory when the class is first time loaded.. That's why it is shared by all the instances. So any change in static variable by any instance will be reflected to all other instances of that class (Yes, you read that right.. You can access static variables through instance variable of the class also.. But compiler is ultimately worried about the actual class only)

于 2012-10-09T13:59:46.463 に答える