スライドショースライドショー

【Java入門】final修飾子の使い方総まとめ(変数、クラス、メソッド)

Javaではfinal修飾子を使用して、値を後から変更できないようにすることが可能です。

この記事では、final修飾子の基礎から発展まで以下の内容で解説していきます。


【基礎】final修飾子とは
【基礎】final修飾子の使い方一覧
【基礎】finalでクラスの継承を防ぐ
【基礎】finalでメソッドのオーバーライドを防ぐ
【発展】static finalで定数を定義する
【発展】finalで引数の値の変更を防ぐ

今回はそんなfinal修飾子の使い方について、わかりやすく解説します!

finalとは

一度変数に設定した値を、後から変更されないようにするためにはfinal修飾子を使用します。

final修飾子は、主に値を変更する予定が無い定数(既定値やファイルパス)などの値を設定するときに使用します。

例えば、変数に対して以下のようにfinal修飾子を指定すれば、その変数は値の変更ができなくなります。

final 型 変数名 = 値

final修飾子は変数以外にもクラスやメソッドも、内容を変更されたくないときに使用することもできます。

クラスをfinal指定するには、以下のように記述します。

final class クラス名 {
    // 処理
}

final修飾子の使い方一覧

final修飾子はクラス、メソッド、変数、引数に指定することができて、それぞれで意味が変わってきます。

表にまとめてみました。

修飾先説明
クラス継承不可
メソッドオーバーライド不可
変数定数となり変更不可
引数メソッド内で変更不可

それぞれについて詳しくみていきましょう。

finalでクラスの継承を防ぐ

final修飾子を指定してクラスを宣言すると、その親クラスは子クラスで継承することはできません

親クラスをfinal指定する目的としては、その親クラスの「安全性保つ」ために使用します。

例えば、以下のようにfinal指定した親クラスに対して、extendsで継承するとコンパイルエラーとなります。

final class 親クラス名 {
    // 処理
}
     
class 子クラス名 extends 親クラス名 {
    // 処理
}
【Java入門】final classの使い方
更新日 : 2019年10月14日

finalでメソッドのオーバーライドを防ぐ

final修飾子は、メソッドに指定することも可能です。

親クラスのメソッドの内容を、サブクラスで変更されたくないときにメソッドにfinal修飾子を指定します。

以下のように親クラスのメソッドにfinalを指定すると、子クラスでメソッドのオーバーライドができなくなります

class 親クラス名 {
 
    final void メソッド名() {
        // 処理
    }
}
 
class 子クラス名 extends 親クラス名 {
 
    void 親クラスのメソッド名() {
        // 処理
    }
}

static finalで定数を定義する

static修飾子は、静的な変数、メンバの意味で、static修飾子を付与したメンバはクラスをインスタンス化しなくても、「クラス名.静的メンバ」の記述で参照することが可能です。

staticイニシャライザで初期化

static修飾子を付与したfinalな変数は、以下のようにstaticイニシャライザ内で定数をまとめて初期化することが可能です。

public static final int 変数1;
public static final int 変数2;
public static final int 変数3;
 
 static {
    変数1 = 10;
    変数2 = 20;
    変数3 = 30;
}

そんなstatic finalの使い方については、以下の記事で詳しく解説しています!

【Java入門】static final修飾子でクラス定数を使う方法まとめ
更新日 : 2019年10月14日

初期化時の注意点

先ほどは初期化についてお伝えしました。

もし、初期値を設定しなければコンパイルエラーとなりますので、ご注意ください。

finalで引数の値の変更を防ぐ

final修飾子は、メソッドの引数に指定することも可能です。

finalを引数に付加することにより、その変数はメソッド内で値を変更することができなくなります

例えば以下のようにfinal修飾子を指定した引数に、値を設定しようとすると、エラーが発生します。

private static void メソッド名(final String str) {
 
    //finalが付与されているため変更不可
    str = "Samurai";
}

ここで紹介したfinalな引数を渡す方法や、メソッド内で引数を渡すさまざまな方法については、以下の記事でも詳しく解説しています。

Javaのメソッド引数丸わかり!値渡し/参照渡し/可変長/final
更新日 : 2019年5月17日

まとめ

ここではfinalの意味や基本的な使い方、static finalの使い方やメソッドの引数にfinalを指定する方法などについて紹介しました。

変数の値やクラス、メソッドの内容を変更されたくないときにfinal修飾子はよく使われますので、ぜひ覚えておきましょう!

final修飾子の使い方を忘れてしまったら、この記事を思い出してくださいね。

LINEで送る
Pocket

無料でSEからWebエンジニアへ転職しませんか?



侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

  • システムエンジニアという職業だけどコードが書けない
  • 事務作業が多くスキルがないため将来が不安
  • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

まずは無料体験レッスンを予約する

書いた人

ヤマシタ

エンジニア歴10年のフリーランスエンジニア。ITに関わるさまざまなコンテンツの企画・制作も行っています。
ITに関してはノウハウ系、ライフハック系、トレンド系など、200本以上の執筆経験があります。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説