1.初始化属性变量的几种时机:
1.1定义时初始化;
1.2构造器中初始化;
1.3在使用之前初试化;
1.4使用实例初始化。
package propertiesinit.one;
public class Main {
//1.定义时初始化definitionInit
private int definitionInit=0;
private int constructorInit;
private String usingInit;
private String instanceInit;
//2.构造方法初始化constructorInit
public Main() {
constructorInit=0;
}
@Override
public String toString() {
//3.使用时初始化usingInit
if(usingInit==null){
usingInit="usingInit";
}
return usingInit;
}
{
//4.实例初始化instanceInit
instanceInit="instanceInit";
}
}
2.code1代码会报错,c变量未初始化;code2正常运行。
package classaccess.one;
//code1
public class Main {
public static void main(String[] args) {
ClassAccess c;
//ClassAccess c = null;
System.out.println(c.i);//The local variable c may not have been initialized
}
}
class ClassAccess{
private ClassAccess(){}
public static int i=1;
}
//code2
package classaccess.one;
public class Main {
public static void main(String[] args) {
//ClassAccess c;
ClassAccess c = null;
System.out.println(c.i);
}
}
class ClassAccess{
private ClassAccess(){}
public static int i=1;
}
注:ClassAccess c;和ClassAccess c = null;是有区别的,前者只是定义了c,后者不仅定义c,同时将c初始化为null。在code2中我们可以注意到,在c为null的情况下我们是可以正常访问引用类型静态成员的(?)。