Java学習の道-最終的なキーワードの使用
概要概要
Javaでは、finalキーワードを使用して、クラス、メソッド、および変数(メンバー変数とローカル変数を含む)を変更できます。
Finalはfinalを意味し、Javaプログラムにfinalクラス、メソッド、および変数を追加することは、それらを変更できないことを意味します。
1つ、最終変更クラス
クラスがfinalで変更されると、クラスを継承できないことを示します。
つまり、クラスを継承できないようにする場合は、finalで修飾できます。Javaでは、StringやSystemなどのクラスは最終的に変更されたクラスです。
最終クラスのメンバー変数は必要に応じてfinalに設定できますが、finalクラスのすべてのメンバーメソッドは暗黙的にfinalメソッドとして指定されることに注意してください。
final class Person {
}
2、最終修正方法
最終的な方法を使用する理由は2つあります。最初の理由は、継承されたクラスがその意味を変更した場合にメソッドをロックすることです。2番目の理由は効率です。以前のバージョンのJava実装では、finalメソッドはインライン呼び出しに変換されます。ただし、メソッドが大きすぎると、インライン呼び出しによるパフォーマンスの向上が見られない場合があります。最近のJavaバージョンでは、これらの最適化にfinalメソッドを使用する必要はありません。-「Javaプログラミング思想」
finalによって変更されたメソッドは、サブクラスによってオーバーライドできません。たとえば、Objectでは、getClass()メソッドはfinalであり、このメソッドをオーバーライドすることはできませんが、hashCode()メソッドはfinalによって変更されず、hashCode()メソッドをオーバーライドできます。
class Person {
final public void say() {
System.out.println("Hello, world!");
}
}
3つの最終的に変更された変数
最終的に変更された変数は、基本データ型の場合は値を変更できません。参照オブジェクト型の場合は、参照アドレスを変更できません。
予防:
- 最終的に変更された属性の場合、属性の割り当て位置には、表示の初期化、コードブロックでの初期化、コンストラクターでの初期化を含めることができ、メソッドで割り当てることはできません。
- 最終的に変更された仮パラメーター変数は、メソッドでのみ使用でき、変更することはできません。
- static finalを使用して、クラスのグローバル定数を装飾できます。
public class Demo {
public static void main(String[] args) {
final Person p = new Person();
p.age = 15;
System.out.println(p.age);
final int age = 18;
// Cannot assign a value to final variable 'age'
// age = 15;
}
}
class Person {
int age = 18;
}