一个Class初始化的问题
public Class T extends Parent{
private static T instance = new T();
public static SummaryConnectionPool getInstance() {
return instance;
}
static Config config = new Config();
public T(){
super( config );
}
};
然后在另一个类里, 调用:
T t = new T();
然后就报NullPointerExcpetion.
点解: 问题处在instance这个静态对象上.
一个类的静态成员和在类实例化比较独立. 静态成员在被引用的时候就会初始化, 而初始化的顺序按照静态成员在源码的书写顺序. 如果某个静态对象A初始化参数引用了写在它后边的静态成员B, 这个时候后边的静态成员B并没有初始化, A得到的就是个null, 于是, NullPointerException 就可能被抛出了.
private static T instance = new T();
public static SummaryConnectionPool getInstance() {
return instance;
}
static Config config = new Config();
public T(){
super( config );
}
};
然后在另一个类里, 调用:
T t = new T();
然后就报NullPointerExcpetion.
点解: 问题处在instance这个静态对象上.
一个类的静态成员和在类实例化比较独立. 静态成员在被引用的时候就会初始化, 而初始化的顺序按照静态成员在源码的书写顺序. 如果某个静态对象A初始化参数引用了写在它后边的静态成员B, 这个时候后边的静态成员B并没有初始化, A得到的就是个null, 于是, NullPointerException 就可能被抛出了.
Comments