Javaにおけるfinalキーワードの使い方のまとめ
2649 ワード
1、final修飾クラスがfinal修飾されたクラスは継承できないため、finalクラスのメンバーメソッドも上書きできず、finalキーワード修飾されたクラスにはサブクラスがないため、クラスの実現の詳細も変更できず、拡張できない.finalクラスのすべてのメンバーメソッドは暗黙的にfinalメソッドとして指定され、finalクラスのメンバー変数は必要に応じてfinalに設定できます.
2、final修飾メソッド1つのクラスのメソッドfinalキーワードで修飾されると、そのサブクラスはそのメソッドを上書きすることができず、布団クラスのみが継承される.親クラスのメソッドが子クラスに上書きされたくない場合は、このメソッドをfinalタイプとして定義できます.また、親クラスのプライベートメソッド(privateキーワードで修飾されたメソッド)も布団クラスに上書きされることは許されません.したがって、親クラスのprivateキーワードで修飾された方法黙はfinalタイプと考え、finalキーワードで修飾されたメソッドには次のような特質があります.
この方法はロックされ、任意の継承クラスがその意味と実現を修正することを防止することができる.効率的.コンパイラはfinalメソッドを呼び出すと組み込みメカニズムに移行し、実行効率を大幅に向上させる.また、final修飾を用いた静的手法は、その属するクラスのサブクラスに隠されてはならない(hide).
3、final修飾変数finalというキーワードの意味は「これは変えられない」または「最終状態」である.では、なぜ変化を阻止するのでしょうか.JAva言語の発明者は2つの目的によって変更を阻止する可能性がある:A.効率問題:jdkの中のいくつかのクラスのいくつかの方法は、ユーザーによってカバーされることを許さない.設計者は、使用する方法がすでに最良の方法であると考えているかもしれない. ユーザーが勝手に上書きしたり、不注意で上書きしたりすると、JVMやシステムのシステムエネルギーに影響します.B.設計に必要な:周知のように、メソッド内の匿名内部クラスのパラメータ伝達などのfinalキーワードを使用する必要がある場合がある.final変数は付与後に可変ではないと言われていますが、この不変はいったい何を指しているのでしょうか.この不変は参照を指し、アドレスであり、参照されるオブジェクトの内容は依然として可変である.すなわち、このfinal変数は常にオブジェクトを指し、定数ポインタではなく定数ポインタです.(1)finalキーワードで修飾された基本データ型は、その数値が初期化されると変更できない.(2)参照タイプの変数であれば,初期化後に他のオブジェクトを指さすことはできないが,その参照が指すオブジェクトの内容は変化する可能性がある.理由は、データ型が格納されている参照オブジェクトのスタックメモリ内のアドレスを参照し、finalが参照タイプを修飾した後、参照が指すスタックメモリ空間(または、参照が格納されているスタックメモリアドレス)を変更できないことが要求されるためです.クラスの非静的メンバー変数をfinalで修飾する場合、メンバー変数の初期化には、(3)宣言時に初期化を行う(4)変数を宣言する際に初期化を行わなくてもよい.この変数はblank final、すなわちfinal空白と呼ばれるが、この変数が存在するクラスのすべての構造方法でこの変数に初期値を付与する.クラスの静的メンバー変数をfinalで修飾する場合、静的メンバー変数の初期化方式は、(5)宣言時に初期化を行う(6)静的初期化ブロックで初期化を行うfinalでインタフェースの静的変数を修飾する場合、その初期化方式は、(7)宣言時に初期化を行う(finalで局所メンバー変数を修飾する場合、使用前に初期化された付与を保証するだけでよい.要するにfinalキーワードで修飾された変数は宣言時に初期化を行わなくてもよいが,その変数が使用される前に初期化されることを保証しなければならず,初期化された付与後,再付与されない.プログラムの出力結果を分析してみます.
4、final修飾パラメータメソッドパラメータがfinalタイプの場合、このパラメータを読み取ることができますが、パラメータの値を変更することはできません.この変数は、メソッド呼び出し時に作成され、対応する実パラメータ値に初期化され、メソッドボディ(body)の実行が終了するまで値を変更できません.finalキーワードで修飾された基本データ型のパラメータは、パラメータ値は変更できません.finalキーワードで修飾された参照データ型は、その参照が他のオブジェクトを指すかnullに再付与することはできませんが、この参照を使用して参照オブジェクトの内容を変更できます.finalパラメータを修飾する目的は、呼び出したメソッド内部でパラメータの操作に対してメソッド外部対応変数の値を変更することを防止するのではなく、このメソッド内でパラメータを再付与する操作を防止し、パラメータ伝達時の初期値に影響を与えるだけである.また,メソッド中のパラメータをfinalキーワードで修飾することは,メソッド外部から伝達されるパラメータの値の内容が変化しないことを防止することはできない.具体的にはfinal修飾参照データ型の解釈を参照することができる.
2、final修飾メソッド1つのクラスのメソッドfinalキーワードで修飾されると、そのサブクラスはそのメソッドを上書きすることができず、布団クラスのみが継承される.親クラスのメソッドが子クラスに上書きされたくない場合は、このメソッドをfinalタイプとして定義できます.また、親クラスのプライベートメソッド(privateキーワードで修飾されたメソッド)も布団クラスに上書きされることは許されません.したがって、親クラスのprivateキーワードで修飾された方法黙はfinalタイプと考え、finalキーワードで修飾されたメソッドには次のような特質があります.
この方法はロックされ、任意の継承クラスがその意味と実現を修正することを防止することができる.効率的.コンパイラはfinalメソッドを呼び出すと組み込みメカニズムに移行し、実行効率を大幅に向上させる.また、final修飾を用いた静的手法は、その属するクラスのサブクラスに隠されてはならない(hide).
3、final修飾変数finalというキーワードの意味は「これは変えられない」または「最終状態」である.では、なぜ変化を阻止するのでしょうか.JAva言語の発明者は2つの目的によって変更を阻止する可能性がある:A.効率問題:jdkの中のいくつかのクラスのいくつかの方法は、ユーザーによってカバーされることを許さない.設計者は、使用する方法がすでに最良の方法であると考えているかもしれない. ユーザーが勝手に上書きしたり、不注意で上書きしたりすると、JVMやシステムのシステムエネルギーに影響します.B.設計に必要な:周知のように、メソッド内の匿名内部クラスのパラメータ伝達などのfinalキーワードを使用する必要がある場合がある.final変数は付与後に可変ではないと言われていますが、この不変はいったい何を指しているのでしょうか.この不変は参照を指し、アドレスであり、参照されるオブジェクトの内容は依然として可変である.すなわち、このfinal変数は常にオブジェクトを指し、定数ポインタではなく定数ポインタです.(1)finalキーワードで修飾された基本データ型は、その数値が初期化されると変更できない.(2)参照タイプの変数であれば,初期化後に他のオブジェクトを指さすことはできないが,その参照が指すオブジェクトの内容は変化する可能性がある.理由は、データ型が格納されている参照オブジェクトのスタックメモリ内のアドレスを参照し、finalが参照タイプを修飾した後、参照が指すスタックメモリ空間(または、参照が格納されているスタックメモリアドレス)を変更できないことが要求されるためです.クラスの非静的メンバー変数をfinalで修飾する場合、メンバー変数の初期化には、(3)宣言時に初期化を行う(4)変数を宣言する際に初期化を行わなくてもよい.この変数はblank final、すなわちfinal空白と呼ばれるが、この変数が存在するクラスのすべての構造方法でこの変数に初期値を付与する.クラスの静的メンバー変数をfinalで修飾する場合、静的メンバー変数の初期化方式は、(5)宣言時に初期化を行う(6)静的初期化ブロックで初期化を行うfinalでインタフェースの静的変数を修飾する場合、その初期化方式は、(7)宣言時に初期化を行う(finalで局所メンバー変数を修飾する場合、使用前に初期化された付与を保証するだけでよい.要するにfinalキーワードで修飾された変数は宣言時に初期化を行わなくてもよいが,その変数が使用される前に初期化されることを保証しなければならず,初期化された付与後,再付与されない.プログラムの出力結果を分析してみます.
public class Test {
public static void main(String[] args) {
String a = "hello2";
final String b = "hello";
String d = "hello";
String c = b + 2;
String e = d + 2;
System.out.println((a == c));
System.out.println((a == e));
}
}
4、final修飾パラメータメソッドパラメータがfinalタイプの場合、このパラメータを読み取ることができますが、パラメータの値を変更することはできません.この変数は、メソッド呼び出し時に作成され、対応する実パラメータ値に初期化され、メソッドボディ(body)の実行が終了するまで値を変更できません.finalキーワードで修飾された基本データ型のパラメータは、パラメータ値は変更できません.finalキーワードで修飾された参照データ型は、その参照が他のオブジェクトを指すかnullに再付与することはできませんが、この参照を使用して参照オブジェクトの内容を変更できます.finalパラメータを修飾する目的は、呼び出したメソッド内部でパラメータの操作に対してメソッド外部対応変数の値を変更することを防止するのではなく、このメソッド内でパラメータを再付与する操作を防止し、パラメータ伝達時の初期値に影響を与えるだけである.また,メソッド中のパラメータをfinalキーワードで修飾することは,メソッド外部から伝達されるパラメータの値の内容が変化しないことを防止することはできない.具体的にはfinal修飾参照データ型の解釈を参照することができる.