次のプログラムをコンパイル・実行するとどうなるか?
public class Knock013 {
private static Object n;
private static final Object HOGE = n.toString();
public static void main(String[] arguments) {
System.out.println("HOGE is " + HOGE);
}
}
解答
変数の初期化がされていない。
nはnullの状態なので、toString()でNullPointerExceptionが発生する
private static final Object HOGE = n.toString();
final修飾子とは
final修飾子を指定した変数は、基本的に規定値など一度値を設定したら変更する必要がないときい使います。
変数は基本的に値を自由に変更できますが、一度値を設定したら変更されない変数のことを「定数」と呼びます。
クラス定数を指定する場合は、変数の宣言の頭にstatic finalを書きます。
- 変数へのfinal:変数へ値の再代入をできなくする(=変数へ値を代入できるのが最初の1回のみになる)
- クラスへのfinal:クラスを継承できなくする
- メソッドへのfinal:メソッドをオーバーライドできなくする