【初心者向け】いろいろ使えるJavaのfinalの使い方

javaのfinalの使い方
  • このエントリーをはてなブックマークに追加
  • Pocket

Javaで使われるfinalとは修飾子のひとつだ。変化をさせたくない変数などに利用していく。

このページではfinalの使い方についてお伝えしていこう。

Javaのfinal

finalとは

Javaのfinalとは、修飾子のひとつだ。修飾子finalは、それが最後のものであることを表す。英語の意味通りだ。

例えば、円周率のような値はどこであっても変わることのない定数なので、一度代入されたなら決して変わって欲しくない。そのため、最後の値という意味でfinalを使っていく。

final変数

一度しか値を代入することができない変数をfinalを使うと宣言することができる。

例えば次の通りだ。

final float finalVariable = 3.14159f;  ←1回目の代入

もしfinal変数に追加で代入しようとするとコンパイルエラーになる。

finalVariable = 3.1f;  ←2回目の代入

コンパイル結果:final変数finalVariableに値を代入することはできません

これは,オブジェクトや配列を参照する変数でも同じだ。

finalクラス

クラスにfinalを付ける宣言することができる。そうすると、クラスを継承することができなくなる。

final class FinalClass { }

extendsに続く部分にfinalクラスが書いてあると、コンパイルエラーになる。

class SubclassOfFinalClass extends FinalClass { }

コンパイル結果:final FinalClassからは継承できません

finalフィールド

フィールドはクラス変数とインスタンス変数にfinalを付けて宣言することができる。

static final int finalClassVariable = 1;

final int instanceVariable = 1;

クラス変数は初期値が設定されないと,コンパイルエラーになる。

static final int finalClassVariable;

コンパイル結果:変数finalClassVariableは、デフォルト・コンストラクタで初期化されていません

もし変数の宣言時に値を設定せず、代入を分けて行いたい場合にはその直後にstaticイニシャライザ(staticブロックなどと呼ばれる場合もある)を使う方法もある。

インスタンス変数も初期値が設定されないと,コンパイルエラーになる。

final int instanceVariable;

コンパイル結果:変数instanceVariableは、デフォルト・コンストラクタで初期化されていません

finalメソッド

メソッドにfinalを付けて宣言することができる。メソッドにfinalを付けると、サブクラスでメソッドをオーバーライドできなくなる。

サブクラスでメソッドをオーバーライドすると,コンパイルエラーになる。

コンパイル結果:SubclassOfFinalMethodのfinalMethod()はFinalMethodのfinalMethod()をオーバーライドできません

では,実際に動くコードで見てみよう。

サンプルプログラム

このサンプルは,円の面積を求めるクラスを使って円の面積を求めている。既にJavaでこの円周率は,「Math.PI」として定義されているが,finalのサンプルとしてあえて定義を独自に行っている。円周率や面積を求めるメソッドは,定理に従ったものなのでこれ以上の追加はないものとしてfinalを付けた。

実行結果

サンプルプログラムの説明

それでは簡単にプログラムの解説をしてゆこう。

  • [1] final変数PIを宣言し,初期化する
  • [2]-[3] 円の面積を求めるfinalメソッドcalculateAreaOfCircleを定義する。
  • [10] Circleクラスのオブジェクトを作る。
  • [11]-[12] 半径0の面積を求めて表示する。

まとめ

このページではJavaのfinalの使い方についてお伝えしてきた。参考にしていただければ幸いだ。

  • このエントリーをはてなブックマークに追加
  • Pocket

このページの続きや関連ページは下記から一覧で確認できます。

IT講師に興味はありませんか?

・「今までIT講師をやってきたが、更に多くの講義を行いたい」

・「エンジニアとしてやってきたが講師業に魅力を感じている」

・「講師として活躍するためにベースとなる知識を知りたい」

・「様々な分野や言語の講師にチャレンジしてみたい」


という方はぜひIT講師募集のページをご覧ください。


リスキルテクノロジーでは「受講している方々にITを好きになってもらう」ことを目標に、同じ目標に向かって歩んで行ける講師の方を常に探しています。


システム開発やインフラ構築などのエンジニアリング経験を活かし、新入社員などの未経験者や経験の浅い初学者の方々に対してITトレーニングを行っていただくことになります。


テキストやカリキュラムは事前に用意されており、それらを元に講義を進めていくため、IT講師をはじめて実施する方でも安心してトレーニングを実施できます。


IT講師募集のページを見る

SNSでもご購読できます。

コメント

  1. 名無し より:

    finalのフィールドですが、説明が間違っています。
    変数は初期値が設定されないと,コンパイルエラーになる。
    変数にfinalをつけて値を設定していない場合、
    (例)
    public class Test{
    public static final String teststatic;
    static{
    teststatic = "none";
    }
    public final String test;
    public Test(String test){
    this.test = test;
    }
    public Test(){
    test = "";
    }
    というように、コンストラクタやstatic{}で宣言するとコンパイルエラーは起きません。

    1. リカレントテクノロジー より:

      いつもご愛読いただきありがとうございます。

      記事中にstaticイニシャライザを利用した際の一例を追記いたしました。

      今後とも、ご愛読のほどよろしくお願いいたします。

リカレントテクノロジー へ返信する コメントをキャンセル

*

未経験からの育成制度も充実
IT講師に興味はありませんか?

リスキルテクノロジーでIT講師の積極募集を開始! 経験・未経験問わずご応募可能。育成制度で講師スキル向上も目指せます

IT講師に応募する