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 )一个实例域啊???
en, hehe, zi ji yan jiu yi xia static ba
A a = new A();
a.getXXX(); 要不你就把这个getXXX()方法申明成static方法,就直接可以使用了
getXXX();
非静态成员都是在构造函数里面被初始化的(你可以自己debug,程序进入构造函数后,在执行构造函数里面的语句之前就开始初始化非静态成员,但是super这句是调用父类的构造函数,这句话是在初始化非静态成员之前执行的,即执行完super之后才初始化非静态成员,所以super里面是不能使用非静态成员的,但可以使用静态成员,因为静态成员在构造函数之前初始化的),不知道我说得是不是清楚。
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);
}}