例:
public class Person { private String name = "zs"; public Person() { System.out.println("Person构造器"); print(); } public void print() { System.out.println("Person print方法: name = " + name); } } class Student extends Person { static { System.out.println("Student静态代码块"); } private String name = "tom"; { System.out.println("Student匿名代码块"); } public Student() { System.out.println("Student构造器"); } public void print() { System.out.println("student print方法: name = " + name); } public static void main(String[] args) { new Student(); } }
以Student s=new Student();为例
该代码的运行结果是:
Student 静态代码块Person 构造器student print 方法 : name = nullStudent 匿名代码块Student 构造器
运行结果为什么是这样,就要学习接下来的过程。
java中创建和初始化对象的过程:
1.对student类进行类加载,同时初始化类中的静态属性并赋默认值,给静态方法分配内存空间
2.执行类中的静态代码块
3.堆中分配对象的内存空间,同时初始化对象的非静态属性并赋默认值,
4.执行Student的父类中的匿名代码块
5.调用Student的父类构造器
6.对Student的成员变量进行显性赋值
7.执行匿名代码块
8.执行构造器方法
9.=赋值操作,把对象内存地址赋值给变量s