この記事は、月CJから再生されます。最終の役割について話を
序文
常にこの話題について書きたかったです。会社の代表も、それぞれのインタビューを候補の数をインタビューし、私は2つの質問のいずれかを聞いてきます「あなたは、最終的なキーワードの理解について話しています。」これは単純な少し疑問ですが、この質問に対する答えを、それを過小評価していないだけでなく、求職者のいくつかの単純な延長は強固な基盤かと心を問い合わせるかどうかを確認することができます。OK、降ります。
finalキーワードの役割
私は、最終的な使用量は、ほとんどの人が気軽に3つの文章を言うことができると考えています。
図1に示すように、修飾された最終的なクラスが継承することができません
図2に示すように、最終的な変性方法を書き換えることができません
図3に示すように、修飾された最終的な変数を変更することはできません
キーは、3番目の文です。変更され、最終的な変数を変更することはできませんし、それをどのように変更することはできません、変数への参照ですか?コンテンツまたは変数の内部?または両方を変更することはできませんか?知っている一例の外観を書きます:
パブリック クラスFinalString { プライベート文字列str; 公共FinalString(文字列str) { 本の.str = STR。 } パブリック文字列getStr() { 戻りSTR。 } 公共 ボイドsetStr(文字列str) { 本の.str = STR。 } }
パブリック クラスのテスト { 公共 静的 ボイドメイン(文字列[]引数) { 最終 FinalStringのFS = 新しい FinalString( "1" )。 fs.setStr( "2" ); System.out.println(fs.getStr())。 } }
それは、まったく問題を実行します。わずかにそれを修正:
パブリック 静的 ボイドメイン(文字列[]引数) { 最終 FinalStringのFS = 新しい FinalString( "1" )。 最終 FinalStringのFSS = 新しい FinalString( "333" )。 FS = FSS; }
5行目は間違った報告書では、「最終的にローカル変数fsができる割り当てられません」。可視、最終的な修正は引用は、参照コンテンツをポイントを変更することができるためにポイントの代わりに不変変数の参照です。OK、配列それの最終修正?
パブリック 静的 ボイドメイン(文字列[]引数) { 最終的な文字列[] strs0 = { "123"、 "234" }。 最終的な文字列[] strs1 = { "345"、 "456" }。 strs1 = strs0。 strs1 [ 1] = "333" 。 }
同様に、ライン5は、「最終的なローカル変数strs1ができません与えられ 、割り当てられる」 ライン6全く問題。変数や配列は、通りである可変基準コンテンツを指し、不変の参照。実際には、使用FindBugsのプラグインであればため、アレイの最終修正内部コードは、コードがバグFindBugsのように流用されるかどうかを確認することであることに注意しなければならない「最終修飾配列は無意味であると。」
次に、シーンのメソッドパラメータの最終修正で見てみましょう:
パブリック クラスのテスト { 公共 静的 ボイドメイン(文字列[]引数) { FinalString FS = 新しい FinalString( "" )。 (FS)。 } プライベート 静的 ボイド A(最終FinalStringのFS) { fs.setStr( "123" )。 FinalString FSS = 新 FinalString( "22" ); FS = FSS; } }
同様に、同じエラーライン13は、ライン11は問題ありません、私たちはすでに、なぜ知っていると信じています。
概要
「リファレンス」は、Javaで非常に重要な概念である、理解するための参照が深いではない、自分自身のいくつかのエラーを認識していないことは容易です。変更され、最終的な変数、変数であり、覚えている変数の種類に関係なく不変では変数への参照ではなく、オブジェクトの内容への参照です。また、この記事の役割は、最終的には言及していない二つのものがあります。
1は、変更され、最終的な方法は、JVMは、Javaの効率を高めるために非常に重要である、インライン誰を追求しようとします。したがって、決意方法は継承することができない場合は、最終的なような方法を定義しよう。
図2に示すように、コンパイル時定数プールにおける変性の最終定数を呼び出すクラスに入金されます。