【Java】finalについて解説

【Java】finalについて解説

finalについて

「final」を和訳すると「最後の」という意味がある。Javaにおいて「final」を付与することによって、言葉のとおり変更できなくなる。「変数」は変わる数の言葉どおり、自由に変更できるものであるが、「final」は一度代入したら変更できない定まった数であるため「定数」となる。

 
📝finalの効果
・変数を定数にする。(変数・フィールドに付与時)
・クラスの継承を不可とする(クラスに付与時)
・サブクラスでオーバーライドできなくする(メソッドに付与時)

 

変数やフィールドにfinalを付与すると「定数」になる。

変数やフィールドにfinalを付与すると定数になります。「定数」になるとはどのようになるのか見ていきましょう。

まずは、「変数やフィールド」に「final」を付与する際の構文になります。

📝final変数・フィールド 構文

アクセス修飾子 final 型名 変数名;  または
final  アクセス修飾子 型名 変数名;

 

「定数」になるとは、上記の構文で宣言をした後に、変数を代入しようとするとコンパイルエラーになります。つまり、変更があるようにプログラムが組めなくなるわけです。

サンプルコード:「SAMPLE_FINAL.java」

public class SAMPLE_FINAL {
  public static final String FINALTEST = “変更不可”;
  final public static String FINALTEST2 = “変更不可2”;

  public static void main(String[] args) {

  }
}

上記のようにプログラムを組んでもコンパイルエラーは起きません。

変数の値をプログラム中に変更しようとすると以下のようなコンパイルエラーが出力されます。

サンプルコード:「SAMPLE_FINAL.java」

public class SAMPLE_FINAL {
  public static final String FINALTEST = “変更不可”;
  final public static String FINALTEST2 = “変更不可2”;

  public static void main(String[] args) {
    FINALTEST = “変更可”;
  }
}

コンパイルエラー

final フィールド SAMPLE_FINAL.FINALTEST には代入できません。

上記のように、finalを付与した変数は変更しようとしても変更できないことが分かります。

すなわち「定数」になりました。

なお、サンプルプログラムでは「static final」とstaticをつけておりました。なぜなら、「public static void main(String[] args) {」は「static」が付いており、「staticな領域から非staticな領域へのアクセスはできない」という性質を持っているため、「public static final String FINALTEST 」と「static」を付与しております。

なお、「static」を付与しない場合は以下のようなエラーメッセージが出力されます。

 

サンプルコード:「SAMPLE_FINAL.java」

public class SAMPLE_FINAL {
  public  final String FINALTEST = “変更不可”;
  final public static String FINALTEST2 = “変更不可2”;

  public static void main(String[] args) {
    FINALTEST = “変更可”;
  }
}

コンパイルエラー

非 static フィールド FINALTEST を static 参照できません

上記のように、finalを付与した変数は変更しようとしても変更できないことが分かります。

static」については以下の記事に詳しく記載しています。
【Java】staticについて(staticメソッド・stati変数・staticイニシャライザについて解説) 

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

PAGE TOP