finalなインスタンス、匿名クラス

| コメント(0) | トラックバック(0)

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]

トラックバック(0)

トラックバックURL: http://www.masatom.in/cgi-bin/mt/mt-tb.cgi/20

コメントする

最近のブログ記事

Mail 2.0 Help: 送信したメールのコピーを保存する
Mail 2.0 Help: 送信したメ…
XPでスタートアップが一部起動しない答え
Doblog - デジ欲侍の破り捨てるメ…
ftp://ftp.jaist.ac.jp/pub/eclipse/technology/epp/downloads/release/europa/winter/ の一覧
ftp://ftp.jaist.ac.j…