关于Java中代码块的执行顺序

1.概念

代码块:使用{}定义的一段代码。根据代码块出现的位置以及关键字不同,分为以下四种代码块。

① 普通代码块:直接定义在方法内部,不加任何修饰符定义的代码块  =》 解决变量重名问题。

关于Java中代码块的执行顺序_第1张图片

关于Java中代码块的执行顺序_第2张图片

 ② 构造块:直接定义在类中,使用{}的代码块。

关于Java中代码块的执行顺序_第3张图片

③ 静态代码块:一般用于初始化静态变量,使用static修饰,直接定义在类中的代码块。

特点:静态代码块在类中加载时执行一次,和具体对象无关!若有多个静态代码块,按照书写顺序依次执行!

主类中的静态代码块还会优先于主方法执行!main存在于主类中,要执行主方法首先得加载到JVM中,当主类一加载,主类中的静态代码块就会自动执行。

2.执行顺序:静态代码块  > 构造块  > 构造方法。

父类静态代码块 > 子类静态代码块 > 父类构造块 > 父类构造方法 > 子类构造块 > 子类构造方法

// 构造块就是非静态代码块
// 执行顺序:父类静态代码块(只执行一次,并且是在main之前执行)
// 父类静态代码块>子类静态代码块>父类构造块>父类构造方法>子类构造块>子类构造方法
class Person 
{
    public int age;
    public String name;
    //构造方法
    public Person(int age,String name)
    {
        this.name=name;
        this.age=age;
        System.out.println("父类构造方法");
    }
    //静态代码块
    static {
        System.out.println("父类静态代码块");
    }
    //构造块
    {
        System.out.println("父类构造块");
    }
    //普通方法
    public void Info()
    {
        System.out.println("姓名:"+this.name+"\t"+"年龄:"+this.age);
    }
}
class Students extends Person{
    public Students()
    {
        super(23,"小红");
        System.out.println("子类的构造方法");
    }
    {
        System.out.println("子类构造块");
    }
    static
    {
        System.out.println("子类静态代码块");
    }
}


public class 代码块 {
    public static void main(String[] args) {
        Students students = new  Students();
        students.Info();
        int num = students.age;
        System.out.println(num);
    }
}

输出结果:

关于Java中代码块的执行顺序_第4张图片

你可能感兴趣的:(Java,SE基础,java,开发语言,jvm)