【初心者向け】いろいろ使える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

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

短期間でエンジニアになる方法

・「まったくの初心者だけどエンジニアになりたい!」

・「プログラマーとして転職をしたい!」

という方はリナックスアカデミーの資料を見てみてください。短期間で未経験からエンジニアになることができるスクールとして15年間選ばれ続けてきた理由やノウハウが載った資料です。

エンジニアの入り口に立つために必要な勉強技術の最新動向本当に使えるIT資格学習に役立つ国からの奨励金などの情報が詰まっています。

無料で2,3日中にお手元にお届けします。


資料を見てみる

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資格、学習に役立つ国からの奨励金などの情報を無料でお届け

資料を見てみる