一个关于java编译的 问题

来源:百度知道 编辑:UC知道 时间:2024/05/16 05:28:12
以下这段程序在jdk1.6编译时,说从内部类中访问局部变量t1,t2,label2,高手给我解释下为什么?我的t1,t2,label2是创建的对象啊,难道不能用实例对象调用方法吗??
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

import java.awt.event.ActionListener;
class text1
{

public static void main(String args[])
{Frame f=new Frame("加法计算");
Panel panel1=new Panel();
Panel panel2=new Panel();
TextField t1=new TextField("0.0");//加数1
TextField t2=new TextField("0.0");//加数2
Label label1=new Label("+") ;
Label label2=new Label("=0.0") ;
panel1.setLayout(new FlowLayout());
panel2.setLayout(new FlowLayout());
panel1.add(t1);
panel1.add(label1);panel1.add(t2);

panel1.add(label2);
Button button1=new Button("add");
Button button2=new Button("clear");
panel2.add(button1);
panel2.add(button2);
f.setLayout(new BorderLayout());
f.

内部类顾名思义就是在类内部定义的类,在一个类的内部定义,吧他当成成员变量来用
例子
public class Text {

public class T {

int i ;
}

public static void main(String args[]) {
Text t = new Text();
Text.T tt = new t.T();
}

}
即使这样,将T类封装在Text里面,只供Text来使用的

button1.addActionListener(new ActionListener()
{ public void actionPerformed(ActionEvent e)
{ double sum=Double.parseDouble(t1.getText())
+Double.parseDouble(t2.getText());
label2.setText("="+sum);
}
});
中的那个new actionlistener就是内部类。因为他没取名字直接创建对象的

这里用到匿名内置类 因为要访问外部类的实例
这些实例对象是用于外部类一个对象调用一个方法是所用到的参数
试想想也许t1,t2,label2是内置类中的一个原有的变量所以
必须把外部类的t1,t2,label2改为final
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

import java.awt.event.ActionListener;
class text1
{

public static void main(String args[])
{Frame f=new