1は、衝突時に最後に値を返します
我々は最終的に後にreturn文を試しに実行される前に実行するために戻ったことを知っています。
あなたが最後のリターンの変数をしようとすると、その終わりに何が最終的に変更した後に、この変数に返されますか?
テストコードで直接の例を参照してください。
クラスYfModel { プライベート文字列名; 公共YfModel(文字列名){ この .nameの= 名前。 } パブリック文字列のgetName(){ 戻り名。 } 公共 ボイドのsetName(文字列名){ この .nameの= 名前。 } } パブリック クラスExceptionYf { パブリック 静的 INT getIntValue1(){ int型の結果= 9 。 試す{ 結果を ++ ; 戻り値の結果; } 最後に{ // 值的修改結果 ++結果。 } } パブリック 静的 INT getIntValue2(){ int型の結果= 9 。 試す{ 結果を ++ ; 戻り値の結果; } 最後に{ // 最後に里直接リターン リターン ++ 結果。 } } パブリック 静的新しいです文字列getStringValue(){ YfModel yfModel = yfModelを。YfModel( "デフォルト" )。 してみてください{ yfModel.setName( "YY" )。 返すyfModel.getNameを(); } 最後に{ // 最後に里修改对象的属性值 yfModel.setName( "FF" )。 } } パブリック 静的YfModel getModelValue(){ YfModel yfModel = 新しい YfModel( "デフォルト" )。 してみてください{ yfModel.setName( "YY" )。 戻り } 最後に{ yfModel.setName( "FF" )。 } } パブリック 静的 ボイドメイン(文字列[]引数){ するSystem.out.println( "valueInt1 =" + getIntValue1())。 System.out.println( "valueInt2 =" + getIntValue2())。 System.out.println( "valueStr =" + getStringValue())。 System.out.println( "valueModel =" + 。getModelValue()のgetName())。 } }
コードは結果を返します:
valueInt1 = 10
valueInt2 = 11
valueStr = YY
valueModel = FF
結論:
、基本型または定数(例えば、文字列)は、最終的に変更してもで、それはリターン結果には影響しません。
Bは、オブジェクトタイプと、最終的に修正オブジェクトの影響が結果を返さあります。(ポインタが、ポインタ・メモリ領域であるため、送信複合オブジェクトと同じです。)
だから、最終的には内部に戻りません。これは、標準的な手法ではありません。
2、最終的には例外がスローしません
その後、最終的には異常な必要性にようやくそれ以外の場合は、中央平原といくつかのtry catch例外情報をカバーする、投げ出されるべきではなく、プレーをキャプチャするためにログインします。
3、最終的にそれを実行します
典型的には、最終的に、ブロックが実行され、一般にストリームの閉操作に使用しました。
アクションの実装でトライキャッチが終了した仮想マシンにSystem.exitを表す場合しかし、それは最終的に実行されません。