InnerClass引用的外层local final变量,究竟具有什么语义

先看这段代码:
public class ShowAnonymousClass extends JFrame {

    Button myButton;

    int count;

    public ShowAnonymousClass() {
        super("Inner Class Frame");
        myButton = new Button("click me");
        final TextArea myTextArea = new TextArea(); //就是这句
        getContentPane().add(myButton, BorderLayout.CENTER);
        getContentPane().add(myTextArea, BorderLayout.NORTH);
        myButton.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent event){
                count++;
                myTextArea.setText("button clicked: " + count + " times");
            }
        });
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public static void main(String[] args) {
        ShowAnonymousClass mainFrame = new ShowAnonymousClass();
        mainFrame.setSize(300,300);
        mainFrame.setVisible(true);
    }
}

一个很简单的例子,使用一个匿名类来处理button的事件,本来以已经习惯于匿名类只能引用上层的final变量,突然想到,当构造函数ShowAnonymousClass执行完毕之后,myTextArea这个local变量应该就失效了,当点击按钮的时候,为啥myTextArea变量对TextArea对象的应用依然有效?final 变量的具体语义究竟是什么,google一把,尽是final变量的值或引用不能改变之类的说法,查了java 语法规范也没找到,谁来说说,local变量,加了final究竟多了什么魔法?莫非类似于闭包?

你可能感兴趣的:(jvm,thread,Google,D语言,sun)