import java.awt.*;public class MyDialog extends Dialog {
private String title = "My own dialog";
public MyDialog() {
super(null, title);
                              //此处提示:Cannot refer to an instance field title while explicitly invoking a constructor 
                              //把title加上staitc后就编译得通过了,为什么非得加上staitc啊??
}}
super()中为什么不能查阅(refer to )一个实例域啊???

解决方案 »

  1.   

    你不加上static也行~那就要在MyDialog()里面加上MyDialog m=new MyDialog();~也是就是实例化一个MyDialog~
      

  2.   


    en, hehe, zi ji yan jiu yi xia static ba 
      

  3.   

    如果不加上static,则初始化构造函数时,title是没有初始化的。static是在类加载的时候初始化的,而构造函数是在static之后加载!
      

  4.   

    这个说来话长了,你要不通过实例化一个对象,然后通过对象来引用方法,比如
    A a = new A(); 
    a.getXXX();  要不你就把这个getXXX()方法申明成static方法,就直接可以使用了
    getXXX();
      

  5.   

    3楼说的我测试了下~~~~并不能说明问题~~~在构造方法中调用其他的方法时可用直接使用非静态的参数title,这说明问题是出在super()上~~~~我用super调用父类别的方法时也是可以使用非静态的参数title的~~我也弄郁闷了~~为什么偏偏是构造方法时就不行了呢~~期待高手~~~楼主如果知道了也告诉我下呵呵~
      

  6.   

    我的理解是这样的:
    非静态成员都是在构造函数里面被初始化的(你可以自己debug,程序进入构造函数后,在执行构造函数里面的语句之前就开始初始化非静态成员,但是super这句是调用父类的构造函数,这句话是在初始化非静态成员之前执行的,即执行完super之后才初始化非静态成员,所以super里面是不能使用非静态成员的,但可以使用静态成员,因为静态成员在构造函数之前初始化的),不知道我说得是不是清楚。
      

  7.   

    当调用该类时:
     1.首先初始化  static {},静态代码块。以及常量 static final声明的变量。
     2.然后通过所调用的构造方法初始化成员变量。
     3.由于title未初始化,但super中调用了该变量。
     4.只要在调用title之前,将它先初始化即可。方法很多,比如说把它放到static中。
      
    import java.awt.*;public class MyDialog extends Dialog {
      static{  
                private String title = "My own dialog";
            }
        public MyDialog() {
            super(null, title);
                                 
        }}