最終更新:2016-04-13 (水) 16:09:32 (1655d)  

final
Top / final

  • フィールドに付けられた場合は定数?であることを表す
  • メソッド宣言に付けられた場合は、サブクラスでオーバーライドできないことを表す

クラス

  • finalと宣言されたクラスを、他のクラスが拡張できません

メモ

  • メソッド引数がメソッド内で変更されない場合、その変数を final として宣言します。
  • 一般に、すべての変数について、初期化または何らかの値に設定されたあとに変数が変更されない場合はその変数を final として宣言します。

メモ

  • final をつけておくと無名インナークラス?やローカルインナークラス (local inner class) からアクセスできる
  • http://homepage1.nifty.com/docs/java/faq/S016.html#S016-14
    ローカルな内部クラスのインスタンスのライフタイム(生成されてからGCされるまでの期間)は、
    それを宣言するブロックやメソッドのライフタイムより長いことがあり、
    その場合、内部クラスから参照しているローカル変数や引数が実際に参照を行なう
    タイミングまで存在し続けていないことがあります。
    そういったケースでも正しく値が参照できることを保証するため、
    参照可能なものを内部クラスが生成される時点以降に値が変更されないもの、
    すなわち、final宣言されているローカル変数や引数のみに制限し、
    その値をコピーしてインスタンス内部に保持するようになっています。
  • Runnableとかは別スレッドになって競合するから