スライドショー

【Java入門】final classの使い方

Javaには「final修飾子」という便利な機能があります。

この記事では、

・final修飾子の使い方
・クラスでfinalを使用する方法
・メソッドでfinalを使用する方法

という基本的な内容から、

・finalの速度面での比較

などに関しても解説していきます。

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

final修飾子の使い方

final修飾子は、変数のように何度も値を設定することができず、一度値を設定したら変更できないようにするために使用します。

主に変更する予定のない規定値などの値を設定するときに、以下のように宣言して使用します。

public static final double DNUM = 3.1415926535

final修飾子を使用した定数の使い方については、以下の記事で詳しく解説しています。

final修飾子は、変数の値を変更したくないときに使用しますが、クラスやメソッドでも同様に内容を変更できないようにする目的で使用することが可能です。

クラスでfinalを使用する方法

final修飾子を指定してクラスを宣言すると、基本的にその親クラスはサブクラスで継承することができません。

クラスをfinal修飾子で使用する目的としては、サブクラスで不用意に値を変えられたくないときや、親クラスの安全性を保つために使用されます。

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

 final class 「クラス名」{
     //処理内容
}

以下のように親クラスをfinalで指定すると、extendsを使用した親クラスの継承が設定できずに、コンパイルエラーとなります。

final class FruitsClass{
    FruitsClass(){
	    System.out.println("FruitClass");
	}
}
	 
class AppleClass extends FruitsClass{
    AppleClass(){
	    System.out.println("AppleClass");
	}
}

メソッドでfinalを使用する方法

親クラスのメソッドの内容を、サブクラスで不用意に変えられたくない場合は、メソッドにfinal修飾子を指定することもできます。

final修飾子でメソッドを指定する場合は、以下のように記述します。

final void 「メソッド名」{
      //処理内容
 }

以下のように親クラスであるFruitsClassのメソッドに対して、final修飾子を付与すると、サブクラスで親クラスのメソッドのオーバーライドができなくなります。

class FruitsClass{

    final void fruits(){
    	//処理内容
    }
}

class AppleClass extends FruitsClass{

	void fruits(){
		//処理内容
	}
}

finalのパフォーマンス

final修飾子を指定した場合の速度面はどうなのでしょうか?

以下にfinal修飾子を指定した定数と通常の変数で、ループの中で1000回演算したときの速度を、ナノ秒単位で計測してみました。

public class FinalClass {
	//クラス定数を宣言
	public static final int NUM = 10;

	public static void main(String[] args) {

		//速度計測 finalあり
		long start1 = System.nanoTime();
		int fval =0;
		for ( int i=0; i<1000; i++){
			fval = fval + NUM + i;
		}
		long end1 = System.nanoTime();
		System.out.println("final : " + (end1 - start1) / 1000000f + "ms");
		
		//速度計測 finalなし
		int num = 10;
		int val =0;
		long start2 = System.nanoTime();
		for ( int j=0; j<1000; j++){
			val = val + num + j;
		}
		
		long end2 = System.nanoTime();
		System.out.println("not final : " + (end2 - start2) / 1000000f + "ms");
		
	}
}
実行結果
<1回目>
final : 0.017818ms
not final : 0.023921ms

<2回目>
final : 0.012512ms
not final : 0.025403ms

<3回目>
final : 0.012461ms
not final : 0.02599ms

実行結果のとおり、finalを付加したほうが処理速度が早いことがわかりました!

クラスについてもっと詳しく知りたい方へ

クラスのさまざまな使い方については、以下の記事にまとめていますので、ぜひ参考にしてくださいね!

finalについてもっと詳しく知りたい方へ

finalのさまざまな使い方については、以下の記事にまとめていますので、ぜひ参考にしてくださいね!

まとめ

ここではfinal修飾子について、意味や基本的な使い方の説明、定数と変数の速度比較の検証を行いました。

final修飾子は不用意に変数や、クラス・メソッドの内容を変えられたくないときに使用します。

もし、クラスやメソッドをfinalで指定する方法を忘れてしまったら、この記事を思い出してくださいね!

LINEで送る
Pocket

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



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

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

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

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

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

書いた人

侍ブログ編集部

侍ブログ編集部

侍エンジニア塾は「人生を変えるプログラミング学習」をコンセンプトに、過去多くのフリーランスエンジニアを輩出したプログラミングスクールです。プログラミングに役立つ情報や有用な情報を発信していきます。
サービスページはこちら
ツイッターはこちら
フェイスブックはこちら

おすすめコンテンツ

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

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