1、虚拟机首次加载类时,会对静态初始块,静态对象,静态方法进行一次初始化。
2、只有调用new方法时才会创建实例。
3、类实例创建过程:首先执行父类初始化块部分,然后是父类的构造方法。然后是子类的初始化快和构造方法。
4、类实例销毁时,先销毁子类部分,在销毁父类部分。
打印内容:
1
2
3
a
4
实例化对象的过程:
1.检查类是否加载,如果没有加载就加载这个类,要加载所有父类;
懒式加载(按需加载):如果第一次用到加载,只加载一下.通过ClassPath制定的路径寻找类文件(.class) 加载以后是一个对象,类型是class.获得这个类对象:student.class-->class实例
2.在内存堆中分配对象空间.递归分配所有父类和子类属性空间.先父类型再子类型,属性默认自动初始化.自动初始化为"0"值;
3.进行属性的赋值;
4.递归调用父类构造器.(默认调用父类无参构造器);
5.调用本类构造器
1、当某个型别为Dog(这里用Dog表示一个类)的对象首次被产生出来,或是当class Dog的static函数或static数据成员首次被访问,java直译器必须查找环境变量classpath所指定的位置,找出Dog.class。
2、一旦Dog.class 被装载,他的所有static动作就会被执行起来。因此他的static初始化动作只会发生一次,就是在class对象首次被装载时。
3、当你new Dog()时,构造过程会先为Dog对象在heap上分配足够的存储空间。
4、这块存储空间会被清为0,并自动将Dog对象内所有隶属基本型别的数据设为缺省值(对数字来说是0),并将references设为null。
5、执行所有出现于数据定义处的初始化动作。
6、执行构造函数。
控制台输出结果:
this is static method~
0
this is static block
1
this is TestInstanceInit's constructor~
如果有一个变量怎么处理呢:
控制台输出结果: 静态变量
静态初始化块
变量
初始化块
构造器