java类的初始化

来源:互联网 发布:mac steam 目录 编辑:程序博客网 时间:2024/06/05 16:44

类的初始化过程

public class Person {    String name = “张三”;    int age = 18;         public Person()    {          name = “李四”          age = 28;    }}


Person p = new Person()

1、将Person.class文件加载到内存

2、在栈内存之中为p开辟空间

3、在堆内存中为Person对象开辟空间

4、对Person对象的成员变量进行默认初始化:name= null, age = 0

5、对Person对象的成员变量进行显示初始化:name = “张三,age =18

6、通过构造方法对Person对象的成员变量赋值:name = “李四”, age=28

7 Person对象初始化完成,将对象地址赋值给p

继承中类的初始化

1、一个类的静态代码块、构造代码块、构造方法的执行流程:

        静态代码块>构造代码>构造方法

        构造代码块和构造方法会在调用构造的时候执行

2、静态的内容是随着类的加载而加载,静态代码块的内容会优先执行

3、子类初始化之前会先对父类进行初始化

public class Fu {     static      {        System.out.println(“Fu静态代码块”);     }     {        System.out.println(“Fu构造代码块”);     }     public Fu ()      {System.out.println(“Fu的构造函数”);     }}public class Zi extends Fu {     static      {        System.out.println(“Zi静态代码块”);     }     {        System.out.println(“Zi构造代码块”);     }     public Fu ()      {         System.out.println(“Zi的构造函数”);     }}public class TestDemo {    public static void main(String[] args)    {       Zi z = new Zi();    }}


Ziz的时候会先对Zi进行加载,而在对Zi进行加载之前Fu进行加载。类在加载的时候会优先加载静态代码块,而构造代码块和构造方法在调构造的时候才会执行

        Fu静态代码

        Zi静态代码

接下来newZi()会先调用Fu的构造,执行Fu构造代码块和构造方法,然后调用Zi构造代码块和构造方法

        Fu构造代码

        Fu的构造函数

        Zi构造代码块

        Zi构造函数



原创粉丝点击