2012-02-25 10 views
2

が、これは、いくつかは、その可能性さえ可能主張であり、私はここであまりにもlinkそれを見た..しかし、私は個人的にしようとしたとき、それは私が時間のコンパイルエラーを与えます..私はこのことを意味..を宣言した後、最終変数を初期化することは可能ですか?

Class A{ 
    private final String data; 

    public A(){ 
     data = "new string"; 
    } 
} 

おかげで

+1

取得しているコンパイル時エラーは何ですか? – Rocky

+0

あなたのコンパイル時のエラーは、大文字の 'Class'に関係するかもしれません。残りは完全にうまくコンパイルする必要があります。 – home

+0

**空白の最終フィールドのデータが初期化されていない可能性があります。** ...これは私が得るものです。 – ngesh

答えて

5

はい、可能です。クラスは小文字のcで書かれています。そうでなければ、あなたのコードは完璧に(識別子を除いて)完全です:

public class A { 
    private final String data; 

    public A() { 
     data = "new string"; 
    } 
} 
4

最終的なインスタンス変数は宣言後に初期化できます。

  • 静的な場合は、静的な初期化 ブロックで初期化する必要があります。
  • それ以外の場合は、コンストラクタで初期化する必要があります。

投稿したコードの問題は、大文字のCです。ボリスが指摘したように、classであったはずです。

2

ボリスさんは、コードが問題ないことを示唆しました。しかし、あなたができないことは、最終的な変数データに第2の値を割り当てることです。 data = "another string";はコンパイルされません。データは最終的なものなので、初期化後にその値を変更することはできません。

public class A { 
    private final String data; 

    public A() { 
     data = "new string"; 
     data = "another string"; 
    } 
} 
2

あなたが、その場合には、複数のコンストラクタを持っているあなたは、これらのコンストラクタのそれぞれで、最終的なインスタンスフィールドを初期化しなければならない可能性が高いです。

関連する問題