最終的指向のJavaオブジェクトを再学びます

最終ルーチン:

戻る確率が最終的な外観の元の質問は、面接の質問バンク、最終的にはその影、最終話の様々な、非常に高くなることができたときに、このようにかなりの道を開きます。

変数の基本的なタイプの1:最終的に修正される変数を変更することはできません

参照変数について2:最終変更されたオブジェクト参照自体を変更することはできないが、コンテンツを変更することができる参照されます。

方法3.:メソッドをオーバーライドすることはできません

クラス4.:クラスは継承できません

 

それはシンプルで良質なコンテンツはしばらく前だったので、私は何回も見て、そして今、書かれた本を読むことはできませんが、ここでは保留に特定のコード例は、インターネットがよりになります。

しかし、私は理由について考えたことはありません。

なぜクラスが継承させませんか?なぜ人々は、メソッドを書き換えてみましょうか?

 

リバース思考

この問題では、私は逆に、私はどのように書き換えるだろうか、継承された場合のことを考えるのが最も効果的だと思います。

最後に、もし継承を見つけるか、我々はそれを書き換えていない、多くの問題を書き換えるために、または継承していない持っていることがあり、その後、我々は最終的にクラスとメソッドを追加します。

 

非変性ファイナルに関しては変数、メソッド、クラス 3つの角度を考えます。

 

変数と最終

 それが遭遇する数学の初心者クラス、およびMathクラスは静的変数の多くは、このようなおなじみのPIとして、共有することができましたが、また、最終的になるように設計されています。

 

 

 、我々は今、グラフィックス・コンピューティング・プログラムのさまざまなパラメータを開発している、あなたがサークル(球)の部分の開発を担当していると仮定し、開発球(ボール)を担当する(運命の名前を明らかにし、ポットマン戻ってそれと呼ばれる...)別の人明らかに、様々な計算プロセスあなたはPIでこの変数を関与することになります。

最終PIに追加されていない場合

ある日、あなたは、ああ、本当に不幸な、あなただけのリストに小数点以下2桁計算結果に必要どのくらいこれがそうPIに見えると思いますが、あなたがあなた自身のクラスの初期化で決めるので、私は、非常に多くの変数小数点以下を取得する必要がありますこの変数の値を変更するとき、それは2つだけ小数点以下の桁です。そして、あなたは知らない球の開発を担当男小数点以下4位に彼の計算を保持するということです。

ここでの悲劇はすでに明確である:あなた自身のテストは問題ありませんし、プログラムの各種パラメータの使用中のユーザーが、計算のラウンドを終え、そして時にPI変数に目的の結果を取得する方法に関連しない他のプログラムを計算し、例えば、球の体積を算出します。

ユーザーはこのすべてを認識していない、彼らは、開発チームのエラーメッセージへのフィードバックは以下となります。私は球を計算するプログラムを使用し、非常に不安定であり、多くの場合、あなたは私が望む結果を得ることができません。

だから、技術的なマネージャー夏が戻って鍋の上に叫ん激しく非難し、彼はすぐにバグを修理しました。

バック夏の同志ポット非常に落ち込んで、問題はありません何の彼のテストは、なぜライン上の不具合があった場合

彼は結果が出ていない調整方法を、彼は本当にどこに問題を知らなかったので、しかし、すべてが、戻って、パン夏は非常に怒っていると非常に面倒正常です。

すでに夜9時、彼は夕食を食べていなかったので、少しポットXiaqiの背中が少し空腹ではなく、食べるために気分で、キーボードを打つしたいバックパンマンのバグを見つけるためには至っていません。

彼らは唯一のPIを使用する男の身代わり外部変数は、ここでは確かに問題ですが、すべてをデバッグするときには、通常のああです。

だから、バックパン夏は、彼の究極の計画を可能にし、彼はグローバル検索PIを実行するには、Ctrl + Shiftキー+ Fを押しました。

私は彼が最終的にこの変数の値を変更し、誰を知ったとき、彼はキーボードを打つてはならないと信じています。

 

概要:一般的に、これは我々が使用する必要があり、共通の変数であるため、静的変数やクラスが、最終的に追加されますと宣言するだけでなく、我々は値をする必要があり、この変数について合意に達した、またはこのアプローチはあるべきことこれもオブジェクト間違った呪いを見つける可能性がランダムな変更が、結果は悲惨なことができれば、書く、しかし。

 

 

方法と、最終的な

 方法を変更する主な方法は、我々は通常、あなたがそれを行う方法を書き換えたい理由を考えることに書き換えることでしょうか?もちろん、それは(フィットまたはしない)親クラスを記述しても大丈夫ではありません

たとえば、オブジェクトのtoStringメソッドは、多くの場合、印刷のために私たちの要件を満たしていない、我々はtoStringメソッドを書き換えるための時間が必要になります。

私はリターンの重要性は、あなたのタイプと同じですが、異なる方法で、私が実現、そして今も、あなたは私が死んでしまう与えた方法を実現していない、これは本当に高すぎる書き換えます。

だから、どのような状況の下で、我々はそれを行うための方法を書き換えるべきではないのですか?

私は2つの可能なケースがある(もちろんだけでなく、これらの2つの場合、個人の技術がより野菜、ビーイングは2つだけと考えることができます)と思います。

  1. 静的変数の変更を必要とする私のアプローチは、その後、もちろん、私はあなたがそれをいじくり回す助けることができないか、あるいは上記の悲劇があるでしょう

  2. 私の方法は、この時間は、私はあなたがたとえば、私は値を返すようにしたい年齢のフィールドを持って変更する文字情報の方法を持って、それを変更したくない、戻り値の型も戻り値が固定され、固定されているだけではありません私は、あなたが変更することができます一度行う方法18は常に、あなたは80に私を置きます。

この例では、適切ではないかもしれないが、我々は例を考えます:

例えば、我々はゲームをプレイしている、文字がハングアップ、出産のポイント、我々は(青漢の完全な血液のフル、)完全な状態で文字を設定する必要があり、この時間に行きますので、今回は文字のセットがメソッド属性がありますこの方法は、あなたが書き換えできた場合、あなたはこのゲームをプレイすることができますか?

その後、私はJDKの例を見つけ、それがカレンダーの明確な方法(カレンダークラス自体は、それが継承することができる修飾された最終されていない)です。

 

 ここで、変数は、あなたがこの方法の明確な機能を実現するために知っておくべきことを意味気にしない、ですが、私はここにスタンプとフィールドを持っている。この方法は、この方法で、あなたが変更できるように開かれた場合、特定の値0を割り当てる必要がありますつまり、あなたが何かにそれを変えるかもしれない、何もありません。

 

上記の二つの点については、私は共通性があると思い、それが私の方法である(通常はパブリック)のユーザーを与える必要があり、私はあなたが私の方法を変更したくない結果を返します(そうではなく、戻り値の型、でも結果は)手とホールドしており、今回は最後の方法を変更することを検討することができます。

 

クラスと最終

クラス決勝に使用し、それがさらに特有のものであり、そして私は単にあなたの相続をしない、あなたは私の方法に従わなければならないすべては、あなたが変更したい量は、メソッドを書き換えるしたいですか?ドアの子供たちはそうではありません

私はずっと今のような変態は、2、1数学、文字列を参照してくださいどのクラス、知っています

一般的に、なぜクラスは、最終的にそれを設計しなければなりませんか?

ここで私はしようとするかの私の浅い理解をベースにすることができます:

数学

ビューの意味論的観点から1:それは、特定の演算処理の戻り値で返さなければならないものである数学、数式を計算するの数、処理等の精度を設定することを含む方法でありますので、それはあなたがそのメソッドのプロセスを変更する必要はありません。

ビューの構文のポイント2.:Mathクラスはインスタンス化され、許可されていないので、それが関与上述したように、変数やメソッドは、インスタンス化されます数学や数式、これらのものの価値の一部ですその人たちが同じであるため、私は、すべてのオブジェクトが変数PIを持つPIを必要としないので、我々は、インスタンス化することなく、使用して共有できるように長い時間がそれがない、一定であり、それは変更する必要があります。

 

不変のオンラインディスカッションの文字列は、1つのまたは2つの記事を書くので、ここで私は単に簡単に要約するのに十分な非常に完了です。

次のように最初のものは、内部の文字列が実際に文字の配列であることを理解することで、そのメンバ変数は次のとおりです。

 

 

 そして、コメントの最初の段落内の文字列のTangchaolizaiの不変性を含めることです。

/ ** 
 *文字列str = "ABC"; 
 * 
 *と等価である:
 * 
 * CHARデータ[] = { 'A'、 'B'、 'C'}。
 *文字列str =新しいString(データ); 
 * /

このコードは、それが何を意味するのでしょうか?

私たちは持っている文字列のソースコードを少し見ては見つけることができます:

公共の文字列(文字の値[]){
     この .VALUE = Arrays.copyOf(値、value.length)。
}

私たちは、それは、引数のコピーを使用し、実際にされていることがわかり、あなたがデータ配列を変更するために行く場合でも、あなたは割り当て、実際に上記のプロセスの実装、他のstrのポイントを与えるとき、あなたはSTR、STRを変更することはできませんメモリではなく、元のメモリを変更します、

文字列の不変性を確保するために、多くのそのような操作があります。

この知識の前提を理解することで、我々は、以下の内容を見ていきます

1.文字列定数プール:文字列定数プールのJavaのコンセプト:

列A = "1" ; 
列B = "1" ブールフラグ=(== b)は、    // 

それは彼らが、メモリの同じ部分に二つのオブジェクトが、ポイントではあるが、それはJavaで定数プールであるということです

私たちは新しい文字列を定義する必要がある場合は、直接新しいものを作成していない、と引き継ぐがある場合、我々は、すでに存在している一定のプールを探してそこに行きますよ

しかし、String型の変数ならば、あなたが行くたびに、直接メモリの値を変更すること、そして、定数プールの意味がありません。

2.別の例は、HashMapのです

私たちはしばしば、共通のJSON形式で理解することは、より良いだけでなく、非常に一貫性のある、価値にHashMapの中の文字列のキーとして使用します。

私たちのString変数は何が起こるかであるならば、私はほとんど知っているから例を見つけ、より明確に話します。

なぜJavaのStringクラスの最後になるように設計されて?  、最初の答えのコード

このことを念頭に置いて、私も書きました:

これは名前である - 地図の年齢

 

    HashMapの<StringBuilderを、整数>マップ= 新しい HashMapの<> (); 
    StringBuilderのSB1 = 新しい StringBuilderの( "李云龙" ); 
    StringBuilderのSB2 = 新しい StringBuilderの( "赵刚" ); 
    map.put(SB1、 35 )。
    map.put(SB2、 30 )。
    System.out.println(マップ)
StringBuilderのSB3
= SB1; sb3.append( "的儿子" ); map.put(SB3、 6 )。 System.out.println(マップ)

 

結果は以下の通りであります:

 

 どこへ行くのグランドマスターリーをしてみましょうか?

 

 ここで、我々は李雲龍に保存されているので、SB1、その後、SB3も変更値SB1で、その結果、メモリの値を変更し、メモリの同じ部分にSB1とSB3ポイントを分析することは、「李雲龍の息子、」私たちのリー・グループとなっています長い消えました。

私たちは、明らかで来るように人を追加したい、まだリーの頭は失っていない、これは明らかに我々の期待を満たしていないが、我々は文字列の不変性を使用する必要がある場合は、達成することができます:

 

HashMapの<文字列、整数> MAP1 = 新しい HashMapの<> (); 
文字列のlaoli = "李云龙" 
文字列xiaozhao = "赵刚" 
map1.put(laoli、 35 )。
map1.put(xiaozhao、 30 )。
 System.out.println(MAP1)。

文字列の息子 = laoli。
息子 + = "的儿子" 
map1.put(息子、 6 ); 
System.out.println(MAP1)。

結果:

 

 

もちろん、我々は単に文字列処理が、ではなくキー値として、StringBuilderのかStringBufferのは良い選択ですが、それはそれらを繰り返さない、この記事の範囲を超えていない場合。

 

これまでのところ、我々はエラーで何かを見つけると不作為はコメント欄に送信するために歓迎されている場合、私は、要約、限られた個人的な技術を終え、最終的にはいくつかの機能については、我々は議論することができます

おすすめ

転載: www.cnblogs.com/bax-life/p/11432637.html