final
783 ワード
final類似cのconst。
1.フィールド用
基本タイプにしても、参照タイプにしても、効果はフィールドに再割り当てができません。javaはオブジェクトの不変を制約するメカニズムを提供していません。
final修飾変数は、コンパイルの間に変数の値が決定されるという意味ではありません。下のコードを参照してください
具体的にはまた二つの状況に分けられます。
2.1方法主体
同時に二つの役割があります。サブクラスの書き換えとコンパイラの内部連結の最適化を禁止します。
2.2関数イメージ
フィnalで修飾すれば、フィナlと変数効果が一致します。実際的な意味はなさそうです。
他のクラスの継承は許されません。つまり、このクラスはサブクラスを持つことができません。
finalを使う以外に、構造関数を私有にしても同じ効果が得られます。
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を使う以外に、構造関数を私有にしても同じ効果が得られます。