Java之块的执行顺序

来源:互联网 发布:网络商标注册 编辑:程序博客网 时间:2024/06/05 19:41

今天遇到一个问题就是一个类的静态属性,静态块,构造块以及构造方法的执行顺序是怎样的,于是写一个demo测试一下。

定义一个Person类

public class Person {    private static User mUser = new User("Person");    static {        System.out.println("Person静态块");    }    {        System.out.println("Person构造块");    }    public Person() {        System.out.println("Person()");    }    public static void main(String[] args) throws Exception {        new Person();    }}

这里定义一个Person类,他有一个静态属性User 之所以这样做是为了打印静态属性的执行顺序,还有静态块,构造块,以及默认的构造方法,以及一个main函数。很简单,下面给出User类的代码

public class User {    public User(String come) {        System.out.println(come + "User()");    }}

下面我们看看运行main函数执行结果如下:

这里写图片描述

发现执行的顺序是:

静态属性 –> 静态块 –> 构造块 –> 构造方法

下面我们再来看看,如果Person有一个子类,那么执行结果会怎样。
定义一个Student 继承至 Person()

public class Student extends Person {    private static User mUser = new User("Student");    static {        System.out.println("Student静态块");    }    {        System.out.println("Student构造块");    }    public Student() {        System.out.println("Student()");    }}

在 Person的main 方法运行:

new Student();

结果如下:

这里写图片描述

结果表明:

先执行 父类的静态属性–>父类的静态块–>子类的静态属性–>子类的静态块–>父类的构造块–>父类的构造方法–>子类的构造块–>子类的构造方法

0 0
原创粉丝点击