私は、ローカル・インナー・クラスが外部メソッドから変数にアクセスする方法についての「コアJava」の本を学んでいます。一方、私は何かについて混乱しています。メソッドはまだ終了していませんが、ローカル変数はもう存在しません。
本は、ここでのコードのスニペットを提供する:
start
メソッドが呼び出される:public void start(int interval, boolean beep) { class TimePrinter implements ActionListener { public void actionPerformed(ActionEvent event) { System.out.println("At the tone, the time is " + new Date()); if (beep) Toolkit.getDefaultToolkit().beep(); } } ActionListener listener = new TimePrinter(); Timer t = new Timer(interval, listener); t.start(); }
本がどのように制御フローこことして示しています。
listener
が初期化されます。listener
の参照は、Timer
コンストラクタに渡されます。 この時点でstart
メソッドのパラメータ変数beep
は存在しなくなりました。- 瞬間後に、
actionPerformed
方法はif (beep) ...
私はビープ音がもはや存在しない理由についてだけで混乱していますを実行しますか?私は、コンパイラがbeep
が効果的に最終であるため、変更しないと仮定することができることを知っている
したがって、メソッド内でクラスを宣言していますか?私はこれが最初にコンパイルされることを非常に疑う。 – Stultuske
@Stultuske eclipseはそのトピックについて何もエラーを投げません – XtremeBaumer
ローカル・クラスと呼ばれます。[この例](https://docs.oracle.com/javase/tutorial/java/javaOO/localclasses.html)を参照してください。コンパイルは成功です。 – DevDio