final

783 ワード

final類似cのconst。
1.フィールド用
基本タイプにしても、参照タイプにしても、効果はフィールドに再割り当てができません。javaはオブジェクトの不変を制約するメカニズムを提供していません。
final修飾変数は、コンパイルの間に変数の値が決定されるという意味ではありません。下のコードを参照してください
class A{
	private static Random rand=new Random();
	private final int i1=rand.nextInt();//       final  
}
class B{
	private final int i1;	//       final    
	public B(int x){	
		i1=x;		//       final  
	}
}
2.使い方
具体的にはまた二つの状況に分けられます。
2.1方法主体
同時に二つの役割があります。サブクラスの書き換えとコンパイラの内部連結の最適化を禁止します。
2.2関数イメージ
フィnalで修飾すれば、フィナlと変数効果が一致します。実際的な意味はなさそうです。
public final void f(){}
void fun2(final A reA){
	//reA=new A(); //illeagl,reA is final
}
3.クラス用
他のクラスの継承は許されません。つまり、このクラスはサブクラスを持つことができません。
finalを使う以外に、構造関数を私有にしても同じ効果が得られます。