属性的几种初始化方法

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的情况下我们是可以正常访问引用类型静态成员的(?)。

原文地址:https://www.cnblogs.com/wjc920/p/9256169.html