はじめに
プログラムを実行したときに「値が null です」といったエラーを見たことはありませんか?
これは、変数を初期化せずに使ってしまったとき に発生するものです。
Javaでは、フィールドはデフォルト値(例えば String は null)が設定されるため、コンパイルは通りますが、
実行時に NullPointerException が発生する可能性があります。
final 修飾子を使うことで、変数の 再代入を防ぐ ことができ、意図しない変更を防止できます。
final修飾子とは
final修飾子は、一度値を代入した変数は変更や上書きができないようにする役割があります。
これにより意図しない変更を防ぐことができます。
クラスやメソッドに関しても同様です。
- 変数へのfinal
- 一度代入すると、値を変更することができない
- メソッドへのfinal
- finalが付いているメソッドはオーバーライドできない
- クラスへのfinal
- finalが付いているクラスへの継承はできない
finalを使用する際のルール
1. 変数に final を適用する場合
- finalをつけた変数は一度だけ代入できる
- フィールドかコンストラクタで必ず初期化する
2. メソッドに final を適用する場合
- final メソッドは サブクラスでオーバーライドできない
3. クラスに final を適用する場合
- final クラスは 継承できない
実際の使用例
簡単なので、変数の場合の例のみ紹介します
class Sample{
private final String name = "hogehoge";
name = "piyo"; //これは再代入になるのでエラー
}
class Sample{
private final String name;
//コンストラクタ
public Sample(){
name = "fuga";
}
}
さいごに
final を適切に使うことで、コードの安全性が高まり、意図しない変更を防ぐことができます。
ただし、むやみに final をつけると柔軟性が失われることもあるため、
「本当に変更してほしくない変数・メソッド・クラス」に使用するのがよいかと思います。