码迷,mamicode.com
首页 > 编程语言 > 详细

Java类加载顺序练习题

时间:2019-06-19 00:36:52      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:main   方法区   代码   静态对象   没有   函数   system   类的加载顺序   实例   

一、题目

public class Test {

    public static Test t1 = new Test();// 标记1

    // 普通代码块
    {
        System.out.println("block A");// 标记2
    }

    // 静态代码块
    static {
        System.out.println("block B");// 标记3
    }

    public static void main(String[] args) {
        Test t2 = new Test();// 标记4
    }

}

二、知识点

类的加载顺序

  1. 父类静态对象和静态代码块
  2. 子类静态对象和静态代码块
  3. 父类非静态对象和非静态构造代码块
  4. 父类构造函数
  5. 子类非静态对象和非静态构造到代码块
  6. 子类构造函数
  7. 普通代码块

上述加载顺序中,类中静态代码块按照声明顺序执行,并且1和2在类加载到方法区的时候执行,也就是不需要在调用new实例的时候就执行了。

三、答案解析

  1. 首先进入Test类,没有父类,那就执行自身的静态对象和代码块,并且按照声明顺序执行。
  2. 所以首先执行标记1的静态对象,并且进行了实例化,所以需要调用相应的构造代码块,执行了标记2的语句,所以输出了block A;
  3. 执行完毕后顺序执行静态代码块,也就是标记3的语句,所以输出了blockB;
  4. 继续执行静态的main方法,重新实例化Test对象,再次调用构造代码块,再次输出了标记2的语句,所以再次输出了block A;

所以最终的结果为:

block A
block B
block A

Java类加载顺序练习题

标签:main   方法区   代码   静态对象   没有   函数   system   类的加载顺序   实例   

原文地址:https://www.cnblogs.com/zxfei/p/11048681.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!