类于对象

动手动脑

当多个类之间有继承关系时,创建子类对象会导致父类初始化块的执行

程序代码

Class Root

{

Static{

System.out.println(“Root的静态初始化块”)

}

{

System.out.println(“Root的普通初始化块”);

}

Public Root()

{

System.out.println(“Root的无参数的构造器”);

}

}

class Mid extends Root

{

Static{

System.out.println(“Mid的静态初始化块”)

}

{

System.out.println(“Mid的普通初始化块”);

}

Public Mid()

{

System.out.println(“Mid的无参数的构造器”);

}

Public Mid(string msg)

{

//通过this调用同一类中重载的构造器

this();

System.out.println(“Mid的带参数构造器,其参数值:”+msg);

}

}

Class Leaf extends Mid

{

static{

System.out.println(“Leaf的静态初始化块”)

}

{

System.out.println(“Leaf的普通初始化块”)

}

public Leaf()

{

}

}

Public class TestStaticInitializeBlock

{

Public static void main (String[] args)

{

New Leaf();

}

}

原因分析是因为当多个类之间有继承关系时,创建的子类对象会导致父类初始化块的执行。具体的执行顺序是先初始化父类的静态初始化块,父类的无参构造器,在进行子类的静态初始化块,子类的无参构造器;然后是父类的普通初始化块,子类的普通初始化块;父类的带参构造器;子类的带参构造器。

动手动脑2

程序截图

 

静态初始化块具体的执行顺序是先初始化父类的静态初始化块,父类的无参构造器,在进行子类的静态初始化块,子类的无参构造器;然后是父类的普通初始化块,子类的普通初始化块;父类的带参构造器;子类的带参构造器。

试验

程序截图

课后作业

使用类的静态字段和构造函数,我们可以跟踪某个类所创建对象的个数。请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象?”。

public class Count {    private static int n;    public Count()    {        n++;//次new一个对象的时候都可以给n加1    }    public static int getNum()    {        return n;//返回n值    }    public static void main(String[] args) {        // TODO 自动生成的方法存根        Count t1=new Tongji();        Count t2=new Tongji();        Count t3=new Tongji();//创建对象        System.out.println("共有对象个数为:"+Count.getNum());    } }

程序截图

 

原文地址:https://www.cnblogs.com/xiaoweixiao/p/4888629.html