2025-05-27 09:54

Java类的初始化顺序

码自答

Java后端

(51)

(0)

收藏

Java 类通过 new 关键字创建对象,在创建对象的时候,由于类中间的属性和方法有不同的修饰符,所以属性和方法在初始化的时候,会有不同的顺序。分两种情况分析:


一 无继承父类

        无继承父类,是指忽略默认继承 Object 类

        1 按照从上到下的顺序构建静态属性、静态块,静态属性和静态块只执行一次。

        2 按照从上到下的顺序构建非静态属性 、非静态块

        3 执行构造方法

package com.wanmait;

public class Student {
    Student(){//6
        System.out.println("构造方法");
    }

    private static int a = 10;//2
    static {//3
        System.out.println("静态块");
    }
    private int b = 10;//4

    {//5
        System.out.println("非静态块");
    }

    public static void main(String[] args) {
        Student student = new Student();//1
    }
}

        2 和 3 是静态属性和静态块,按照从上到下的顺序先执行

        4 和 5 是非静态属性和非静态块,按照从上到下的顺序再执行

        构造方法最后执行。


二 有继承父类

        1 按照从上到下的顺序,执行父类的静态属性和静态程序块

        2 按照从上到下的顺序,执行子类的静态属性和静态程序块

        3 按照从上到下的顺序,执行父类的非静态属性和非静态程序块

        4 父类构造方法

        5 按照从上到下的书匈奴,执行子类的非静态属性和非静态程序块’

        6 子类的构造方法

package com.wanmait;

public class Person {

    private static int pa = 10;//2

    static {//3
        System.out.println("父类静态程序块");
    }

    private int pb = 10;//6

    {//7
        System.out.println("父类非静态程序块");
    }

    public Person()//8
    {
        System.out.println("父类构造方法");
    }
}
package com.wanmait;

public class Student extends Person{

    Student(){//11
        System.out.println("子类构造方法");
    }

    private static int a = 10;//4

    static {//5
        System.out.println("子类静态块");
    }


    private int b = 10;//9

    {//10
        System.out.println("子类非静态块");
    }

    public static void main(String[] args) {
        Student student = new Student();//1
    }
}

        

注意:

1 类的非静态属性不能创建类自己本身的对象

2 类的静态属性可以创建自己类本身的对象,执行非静态属性,非静态程序块以及构造方法


0条评论

点击登录参与评论