Javaのパラメーターを変更するためにファイナルを使用する役割
メソッドパラメーターの前に最終的なキーワードを追加することは、メソッドの重みでデータが変更されないようにすることです。
2つの主な状況があります。まず、ファイナルを使用して基本データ型を変更します。次に、ファイナルを使用して参照データ型を変更します。
最初のケースでは、基本的なデータ型を変更します。その時点で、メソッド本体でパラメーターの値を変更できません。つまり、再割り当てすることはできません。それ以外の場合、コンピレーションは渡されません。
2番目のケースは、参照タイプを変更することです。この時点で、パラメーター変数によって参照されるオブジェクトを変更することはできません。ただし、参照データ型の場合、プロパティを変更してもまったく問題ありません。
したがって、キーワードファイナルを使用する場合は、非常に便利な基本データ型を使用します。
最終変数:
基本タイプにファイナルを使用します:それは一定であり、値は一定であり、値は変更されません。
オブジェクトの参照にファイナルを使用します:参照定数を作成し、参照が初期化されてオブジェクトを指すようにすると、別のオブジェクトを指すように変更できません。ただし、オブジェクト自体を変更でき、Javaはオブジェクトを一定にする方法を提供しません。この制限は、オブジェクトである配列も使用します。
例:
クラス値{int i; public Value(int i){this.i = i; }} public class finalData {private static random = new Random(47);プライベート文字列ID; public finalData(string id){this.id = id; } private final int valueNe = 9;プライベート静的final int value_two = 99; public static final int value_three = 39;プライベートファイナルint i4 = random.nextint(20);静的最終int_5 = random.nextint(20);プライベートバリューv1 = new Value(11);プライベート最終価値v2 = new値(22);プライベート静的最終値VAL_3 =新しい値(33);プライベートファイナルint [] a = {1、2、3、4、5、6}; public string toString(){return id + ":" + "i4 =" + i4 + "、int_5 =" + int_5; } public static void main(string [] args){finalData fd1 = new finalData( "fd1"); //! fd1.valueone ++; // valueNeは基本的なタイプ定数であるため、その値は一定のfd1.v2.i ++です。 //ファイナルによって変更されたオブジェクトのコンテンツは、FD1.v1 = new値(9)を変更できます。 for(int i = 0; i <fd1.a.length; i ++)fd1.a [i] ++; //! fd1.v2 = new値(0); // V2は最終的に変更された参照型であるため、その参照は別のオブジェクトを指すように変更できません//! fd1.val_3 = new値(1); //変更できないメモリ空間を占有します//! fd1.a = new int [3]; //最終的な変更配列system.out.println(fd1); System.out.println( "新しいfinalDataの作成"); finalData fd2 = new finalData( "fd2"); System.out.println(fd1); System.out.println(fd2); }}/*output:fd1:i4 = 15、int_5 = 18 Creating new finaldatafd1:i4 = 15、int_5 = 18fd2:i4 = 13、int_5 = 18*/分析:
FD1、FD2の2つのオブジェクトの場合、i4は一意です。つまり、各オブジェクトにはi4がありますが、int_5は静的と宣言されています。つまり、クラス、FD1およびFD2共有INT_5で共有されます。しかし、それは同時に最終的に設定されているため、その参照は不変です。つまり、別のオブジェクトを指すように変更することはできません。
ブランクファイナル:
最終として宣言されていますが、最初の値はありません。ファイナルは、ドメイン定義または各コンストラクターの式を使用して割り当てる必要があります。そのため、最終ドメインは常に使用前に初期化されます。
最終パラメーター:
これは、メソッドのパラメーター参照を変更して別のパラメーターを指すことはできないことを意味しますが、最終的なオブジェクトが指しているものを変更できます
例:
class gizmo {int i = 0; public void spin(){}} public class finalArguments {void with(final gizmo g){//! g = new Gizmo(); //ファイナルによって変更された参照は、別のオブジェクトG.I ++を指すように変更されていません。 //しかし、最終的なオブジェクトによって指されたコンテンツは、(gizmo g)なしでvoidを変更できます} {g = new gizmo(); g.spin(); } // int g(final int i){// //! i ++; //パラメーターIは一定の値だから//} int g(final int i){return i + 1; } public static void main(string [] args){finalArguments bf = new finalArguments(); bf.with(null); bf.with(null); }}分析:
パラメーターは最終として宣言されます。それが基本的なパラメーターである場合、それは定数であり、変更することはできません。参照変数の場合、別のオブジェクトを指すように変更することはできませんが、参照によって言及されるオブジェクトのコンテンツは変更できます。
fianlメソッド:
使用する理由:
クラス内のすべてのプライベートメソッドは、ファイナルとして暗黙的に指定されており、プライベート方法を使用できないため、上書きすることはできません。最終的な修飾子をプライベートメソッドに追加できますが、これはメソッドに追加の意味を与えません。
例:
class withfinals {private final void f(){system.out.println( "withfinals.f()"); } private void g(){system.out.println( "overridingprivate.f()"); }} class overridingPrivateはファイナルで拡張されます{private final void f(){system.out.println( "overridingprivate.f()"); }} class overridingPrivate2は、オーバーライドアノテーションを使用してf()メソッドを強制して親クラスのf()メソッドを上書きするように強制する場合、エラーが報告されます。 g()メソッドの場合、新しいメソッドを生成するだけで、親クラスのg()メソッドを上書きしません。 *///@Override public final void f(){system.out.println( "overridingprivate2.f()"); } public void g(){system.out.println( "overridingprivate2.g()"); }} public class finaloverridingillusion {public static void main(string [] args){overridingPrivate2 op2 = new overridingPrivate2(); op2.f(); op2.g(); //上向きのOverridingPrivate op = op2を変換できます。 //! op.f(); //親クラスの最終的な方法は、サブクラスには見えません//! op.g(); withfinals wf = op2; // wf.f(); // wf.g(); }}/*output:OverridingPrivate2.f()OverridingPrivate2.g()*/分析:
カバレッジはいつ発生しますか:
1。サブクラスに表示されるメソッドは、親クラスのメソッドとまったく同じです
2.サブクラスは親クラスに上向きに変換し、親クラスのメソッドを呼び出すことができます
親クラスのメソッドが最終またはプライベートとして宣言されている場合、この方法はサブクラスに見えません。親クラスがサブクラスで作成された方法とまったく同じ方法であっても、これは親クラスから上無効にされるメソッドではなく、新しい方法です。
最終クラス:
つまり、このクラスはあなたであろうと他の人であろうと、このクラスは変更を必要とせず、文字列クラスなどのサブクラスを必要としません。
例:
クラスSmallbrain {}最終クラスの恐竜{int i = 7; int j = 1; SmallBrain X = new SmallBrain(); void f(){}} //エラー:さらにタイプは最終クラスの恐竜をサブクラス化できません//恐竜クラスはサブクラスを持つことができませんnf(); ni = 40; N.J ++; }}要約します
上記は、この記事のコンテンツ全体です。この記事の内容には、すべての人の研究や仕事に特定の参照値があることを願っています。ご質問がある場合は、メッセージを残してコミュニケーションをとることができます。 wulin.comへのご支援ありがとうございます。