###前提・実現したいこと
クラスメソッドローカル変数のスコープについてご教示ください。
クラスメソッドの中でJButton を生成しアクションイベントを定義しました。
このアクションイベントの中でクラスメソッド内のローカル変数にアクセスできます。また、メソッドが終了した後にボタンクリックによるアクションイベントが実行された場合でも値が保存されているように見えます。
メソッド内で定義したローカル変数なので、メソッドが終了してしまえばこのローカル変数もスコープ外となと思うのですが。
そもそもこのコーディングは間違えでしょうか?
また、ローカル変数へfinalを付けた場合との違いは有るのでしょうか?
当サイト初心者で他に同様の投稿があるか検索できませんでした。
また、JAVAにも精通していません。
申し訳ございませんがご教示の程よろしくお願いいたします。
###ソースコード
public class SSample11_1{
static JFrame frame; static JPanel p; static Test1XX[] t1 = new Test1XX[10]; public static void main(String args[]){ SSample11_1 ss = new SSample11_1(); } SSample11_1() { frame = new JFrame("タイトル"); frame.setBounds(100, 100, 300, 250); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container contentPane = frame.getContentPane(); p = new JPanel(); p.setLayout(null); contentPane.add(p, BorderLayout.CENTER); frame.setVisible(true); for(int i = 0; i<10 ; i++){ t1[i] = new Test1XX(); } for(int i = 0; i<10 ; i++){ t1[i].test1xx1(i); t1[i].test1xx2(9-i); } } class Test1XX { private JButton btn; int _iii; public void test1xx1(int i) { final int _i = i; int _ii = i; System.out.println("_i=" + Integer.toString(_i)+"_ii=" + Integer.toString(_ii)); btn = new JButton(String.valueOf(i)); btn.setBounds(0, i*22, 100, 20); SSample11_1.p.add(btn); btn.setVisible(true); btn.repaint(); btn.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent event){ JLabel msg = new JLabel("クリックされました - > "+String.valueOf(_i)+" : "+String.valueOf(_ii)); JOptionPane.showMessageDialog(frame, msg); } }); } public void test1xx2(int i) { final int _i = i; _iii=i; System.out.println("_i=" + Integer.toString(_i)+"_iii=" + Integer.toString(_iii)); } }
}
###補足情報(言語/FW/ツール等のバージョンなど)
JDK1.8で確認しました。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/04/27 02:54
2016/04/27 03:02 編集
2016/04/27 10:02