class myWindow extends Frame{
   
    public myWindow(String titleStr)
    {
        super(titleStr);
    }    public static void main(String[] args)
    {
        myWindow win = new myWindow("Test");
        win.setVisible(true);
        win.setLayout(null);        TextArea taBox = new TextArea();
        win.add(taBox);
    }    public void setTxt(String txt)
    {
        //此处taBox不可见
    }}
如上代码,窗体上有一个多行文本框taBox,我想在方法setTxt()中操作taBox,但这样是不行的。
欲使taBox对setTxt()可见,只得将taBox声明为类成员,这样的话,静态方法main不能初始化taBox,必须将taBox声明为静态类成员,如下:
class myWindow extends Frame{    private static TextArea taBox; //此处必须将taBox声明为static    public myWindow(String titleStr)
    {
        super(titleStr);
    }    public static void main(String[] args)
    {
        myWindow win = new myWindow("Test");
        win.setVisible(true);
        win.setLayout(null);        taBox = new TextArea();
        win.add(taBox);
    }    public void setTxt(String txt)
    {
        //taBox可见
    }}
我想知道必须声明为 static 有什么好处?

解决方案 »

  1.   

    静态上下文中不能引用非静态变量最明显的,它们的初始化顺序不一样。静态的比非静态的先初始化。所以,静态上下文中不能引用非静态变量。
      

  2.   

    反证法:假设有一个类,现在没有创建任何的一个对象。但是你可以用类名称直接访问一个静态方法,没有问题。如果这个静态方法,又访问了非静态的变量,而非静态的变量是实例变量,要创建出这个类的对象才能引用。这明显矛盾。所以....