http://www.gimlay.org/~javafaq/S016.html#S016-14
http://www.gimlay.org/~javafaq/S012.html
final で修飾されている変数を宣言時に初期化しなくてもいいのですか?
[S012 A-07]
final変数は代入が1回しか行われないことが保証されていれば、初期化する必要はありません。
代入を行う箇所は以下のようになります。
1. static メンバの場合、変数を宣言した場所または静的初期化子
2. インスタンスメンバの場合、変数を宣言した場所または各コンストラクタ
3. ローカル変数の場合、スコープ内の任意の場所
変数を宣言した場所で代入を行わない場合の final を blank final といいます。
参考記事 [JavaHouse-Brewers:9544]
[S012 Q-16]
JDK 1.1 で引数を final にできるようになったのは何のためですか?
[S012 A-16]
メソッド引数やローカル変数で final を使用すると、
その変数をメソッド内に記述された inner class(匿名クラス)内でも
使用することができます。
Button button = new Button("How are you?");
final TextField textfield = new TextField();
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
textfield.setText("I'm fine!");
}
});
ここで textfield を final とする理由は、
inner class(ここでは ActionListener を継承した匿名クラス)
が受け取った textfield の参照先と outer class の textfield の
参照先が一致しなくなってしまう可能性があるためです。
参考記事 [JavaHouse-Brewers:9568]
コメントする