メソッドローカルの内部クラスは、メソッドが終了してもまだメソッドローカルの内部クラスのインスタンスが存続している可能性があるため、ローカル変数にアクセスできません。しかし、ローカルメソッドが終了すると、ローカル変数は消えてしまいます。 メソッドローカルの内部クラスが最終的なローカル変数にアクセスできることを知りました。これは、メソッドが終了した後もまだ最終的なローカル変数が生きているのでしょうか?Javaの最終ローカル変数の範囲
答えて
並べ替えJavaの匿名の内部クラスは、「クロージャ」のように動作します。つまり、現在のローカル状態を「閉じ」ます。しかし、Javaでは、これらのクラスを最終変数の周りで閉じることができます。そうでない場合、変数のローカル状態は変更される可能性がありますが、内部クラスに保持されているバージョンは変更されないため、「古くなった」インスタンスにアクセスすることになります。これはプログラマにとって混乱を招く可能性があります。
代わりに、Javaでは、変数の再割り当てではなく、メソッドによってインスタンスによって変更可能性が処理される必要があります。これにより、より明瞭になり、より簡単なデバッグが可能になります。 Javaがこれを行う理由の詳細については、this answerを参照してください。
クラスには依然として変数への参照が保持されているため、質問に対する回答はありです。内部クラスが変数の所有権を放棄するまで、そのインスタンスはガベージコレクションされません。
* "これはプログラマーにとって混乱を招くかもしれません。" * - さらに多くの点では、これ以上クロージャーに似ていません。レキシカルコンテキストに応じて、異なるバインディングを持つ識別子の名前を持つことになります。 –
@Stephen十分に公正で、良い点。 –
いいえ、それはありません。ローカル変数のコピーがまだ内部クラスのインスタンスで生きていることを意味します。 「最後」は、2つのコピーが混乱しないように価値があることを確認するだけです。
- 1. Java/Androidコードの変数の範囲。
- 2. 範囲外のAndroid/Java変数
- 3. Javaでの最終的なローカル変数の使用
- 4. 最終的なローカル変数のエラー
- 5. Javaの最終変数
- 6. 範囲(最小、最大、値)Javaの関数
- 7. perlの変数の範囲
- 8. KSHの変数の範囲
- 9. は、変数の範囲(パイソン)
- 10. ASP.Net変数の範囲
- 11. PHP pcntl変数の範囲
- 12. インナークラス非最終変数java
- 13. のJava:サブインデックス範囲
- 14. Javaの範囲スライダ
- 15. 範囲にVBAポイント変数
- 16. Javaのハッシュコードが最終的な変数
- 17. Java:抽象クラスの最終変数
- 18. ifステートメントの変数の範囲
- 19. SQLカーソル内のテーブル変数の範囲
- 20. 範囲外の変数へのアクセスSwift
- 21. 変数がこの範囲gccのエラー
- 22. Ruby:変数の範囲の質問
- 23. 最終値から文字列の範囲を作成する
- 24. javascript module pattern変数の範囲
- 25. JavaScript変数の範囲(XUL関連)
- 26. SQL Server - 変数の日付範囲
- 27. フィルタの最適範囲
- 28. ローカル変数はなぜ最終的なのですか?
- 29. 範囲内の範囲を定義する最高のグラフィカルウィジェット
- 30. Excel VBAの範囲から最初の列範囲を取得
誰もあなたの質問を間違って誤解しないようにあなたの例を投稿してください。われわれはコーダーであり、Javaコードはこれをもっと明確にするだろう。 – jmort253
私はこれがあなたが意味するものだと思っています。それはうまく動作しません。 http://ideone.com/LNg9w –
@HunterMcMillen質問はメソッドローカルクラスであり、他のメソッドではありません。 – Jeffrey