对象实例化过程:
1.看类是否已加载,未加载的话先初始化类。
2.在堆内存中分配空间。
3.初始化父类的属性
4.初始化父类的构造方法
5.初始化子类的属性
6.初始化子类的构造方法
实例:
package com.xm.load;public class Animal { static String str = "I`m a animal!"; public String str1 = "I`m 10 years old @Animal"; static { System.out.println(str); System.out.println("加载父类静态代码块"); } static void doing() { System.out.println("This ia a Animal!"); } public Animal() { doing(); System.out.println(str1); System.out.println("Animal 对象实例化"); }}class Dog extends Animal{ static String str = "I`m a dog!"; private String str1 = "I`m 10 years old @Dog"; static { System.out.println(str); System.out.println("加载子类静态代码块"); } static void doing() { System.out.println("This ia a dog!"); } public Dog() { doing(); System.out.println(str1); System.out.println("Dog 对象实例化"); } public static void main(String[] args) { new Dog(); }}
运行结果:
I`m a animal!
加载父类静态代码块
I`m a dog!
加载子类静态代码块
This ia a Animal!
I`m 10 years old @Animal
Animal 对象实例化
This ia a dog!
I`m 10 years old @Dog
Dog 对象实例化
我们来看一下,重写过的父类方法,在加载父类时的情况。
实例:
package com.xm.load;public class Animal { static String str = "I`m a animal!"; public String str1 = "I`m 10 years old @Animal"; static { System.out.println(str); System.out.println("加载父类静态代码块"); } static void doing() { System.out.println("This ia a Animal!"); } public void todoing() { System.out.println(str1); System.out.println("加载子类的重写方法"); } public Animal() { doing(); todoing(); System.out.println("Animal 对象实例化"); }}class Dog extends Animal{ static String str = "I`m a dog!"; private String str1 = "I`m 10 years old @Dog"; static { System.out.println(str); System.out.println("加载子类静态代码块"); } static void doing() { System.out.println("This ia a dog!"); } public void todoing() { System.out.println(str1); System.out.println("加载子类的重写方法"); } public Dog() { doing(); System.out.println("Dog 对象实例化"); } public static void main(String[] args) { new Dog(); }}
结果:
I`m a animal!
加载父类静态代码块
I`m a dog!
加载子类静态代码块
This ia a Animal!
null
加载子类的重写方法
Animal 对象实例化
This ia a dog!
Dog 对象实例化
由此可见,null代表着加载父类构造方法时,调用的todoing( )方法是子类的方法,且子类的属性的初始化过程发生在父类构造方法之后。