java-类对象的初始化

类对象的初始化:
1.static成员变量的初始化
2.static块的初始化
//与实际在代码中的位置有关
3.实例成员变量的初始化
4.实例块的初始化
//与实际在 代码中的位置有关
5.构造函数

构造函数:
可以重载 无返回值 如果你没有写构造函数,系统会给出默认构造函数,如果已经写了,则调用构造函数不符时会出错

实例初始化:
实例,实例,即依赖于对象的成员进行的初始化,每个对象产生前都要调用一次

普通与static:同名的成员和方法可以定义
******************普通成员 ************* 静态成员
普通方法 **********可以******************可以
静态方法 **********不可以 ****************可以

class data{
    String year;
    String month;
    String day;
    static int days;
    static{
        System.out.println("data static init block!");
        days = 0;
    }
    //实例(依赖于对象的成员)初始化块     对象产生之前都要调用一次
    //实例初始化块先调用,然后是对象的构造函数调用
    {
        System.out.println("data instance init block!");
        this.year = null;
        this.month = null;
        this.day=null;
    }
    public data() {
        System.out.println("data data()");
    }
    public data(String year,String month,String day) {
        this.year=year;
        this.month=month;
        this.day=day;
        System.out.println("data data()");
    }

}

public class my {
    int a;
    char b;
    static data c=new data("2012","10","1");
    static{
        System.out.println("my static init block!");

    }
    //实例(依赖于对象的成员)初始化块     对象产生之前都要调用一次
    //实例初始化块先调用,然后是对象的构造函数调用
    {
        System.out.println("my instance init block!");
        this.a = 0;
        this.b = 0;
    }
    public my() {
        System.out.println("my Person()");
    }
    public static void main(String[] args) {
        my b=new my();

    }

}

结果输出:
data static init block!
data instance init block!
data data()
my static init block!
my instance init block!
my Person()

分析:在main中创建my对象———>先初始化my中的static成员变量,即data对象(data的static成员变量——>data的static块初始化 ——>data的实例初始化——>data的构造函)——>my的static块初始化——>my的普通成员的初始化——>my的实例块初始化——>my的构造函数

*将my的成员变量c设置为普通成员变量,即去掉static*
public class my {
    int a;
    char b;
    data c=new data("2012","10","1");
    static{
        System.out.println("my static init block!");

    }
    {
        System.out.println("my instance init block!");
        this.a = 0;
        this.b = 0;
    }
    public my() {
        System.out.println("my Person()");
    }
    public static void main(String[] args) {
        my b=new my();

    }

}

输出结果:
my static init block!
data static init block!
data instance init block!
data data()
my instance init block!
my Person()
分析:在main中创建my对象———>先初始化my中的static成员变量(my中现在没有static成员变量)——>my的static初始化——>my的普通成员的初始化(data的static成员变量——>data的static初始化 ——>data的实例初始化——>data的构造函)——>my的实例初始化——>my的构造函数

*将my实例化块放在普通成员变量的前面*
public class my {
    {
        System.out.println("my instance init block!");
        this.a = 0;
        this.b = 0;
    }
    int a;
    char b;
     data c=new data();

    static{
        System.out.println("my static init block!");

    }
    //实例(依赖于对象的成员)初始化块     对象产生之前都要调用一次
    //实例初始化块先调用,然后是对象的构造函数调用

    public my() {
        System.out.println("my Person()");
    }
    public static void main(String[] args) {
        my b=new my();

    }

}

输出结果:
my static init block!
my instance init block!
data static init block!
data instance init block!
data data()
my Person()

分析:在main中创建my对象———>先初始化my中的static成员变量(my中现在没有static成员变量)——>my的static初始化——>my的实例初始化——>my的普通成员的初始化(data的static成员变量——>data的static初始化 ——>data的实例初始化——>data的构造函)——>my的构造函数

猜你喜欢

转载自blog.csdn.net/s_yj_q/article/details/78380263