面试题47(关于类的加载顺序)

以下代码执行后输出结果为?

public class Test{

public static Test t1 = new Test();{

System.out.println("blockA");

}

static{

System.out.println("blockB");

}

public static void main(String[] args){

Test t2 = new Test();

}

}

A blockA blockB blockA

B blockA blockA blockB

C blockB blockB blockA

D blockB blockA blockB

考点:考察求职者对类的加载顺序的掌握

出现频率:★★★★★

【面试题分析】

1.首先,需要明白类的加载顺序。 (1) 父类静态对象和静态代码块 (2) 子类静态对象和静态代码块 (3) 父类非静态对象和非静态代码块 (4) 父类构造函数 (5) 子类 非静态对象和非静态代码块 (6) 子类构造函数 其中:类中静态块按照声明顺序执行,并且(1)和(2)不需要调用new类实例的时候就执行了(意思就是在类加载到方法区的时候执行的) 2.因而,整体的执行顺序为 public static Test t1 = new Test(); //(1) static { System.out.println("blockB"); //(2) } Test t2 =new Test(); //(3) 在执行(1)时创建了一个Test对象,在这个过程中会执行非静态代码块和缺省的无参构造函数,在执行非静态代码块时就输出了blockA;然后执行(2)输出blockB;执行(3)的过程同样会执行非静态代码块和缺省的无参构造函数,在执行非静态代码块时输出blockA。因此,最终的结果为 blockA blockB blockA

所以参考答案是 (A)

本文分享自微信公众号 - java学习(javaxxf)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-12-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏mukekeheart的iOS之旅

对两个有序数组进行合并

问题描述:   数组arr[0...mid-1]和arr[mid..n-1]是各自有序的,对数组arr[0..n-1]的两个有序段进行合并,得到arr[0..n...

26960
来自专栏WindCoder

Java基础小结(一)

1、default (即缺省,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。

13010
来自专栏cs

c++面向对象的一些问题1.0

构造函数 特殊的成员函数,给对象的初始化,不需要用户调用,建立对象时,自动执行 它的函数名字与类相同,可以重载,没有返回值和函数类型。 如果不写构造函...

307100
来自专栏marsggbo

malloc函数及用法

动态存储分配 在数组一章中,曾介绍过数组的长度是预先定义好的,在整个程序中固定不变。C语言中不允许动态数组类型。 例如: int n; scanf("%d",&...

27380
来自专栏小勇DW3

彻底弄懂字符串常量池等相关问题

  在平时我们使用字符串一般就是拿来直接搞起,很少有深入的去想过这方面的知识,导致别人在考我们的时候,会问 String str = new String("1...

17320
来自专栏个人随笔

Java 高级开发必修知识---反射

程序猿们经常说的一句话:反射反射。。。程序员的快乐 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法; 对于任意一个对象,都能够调用它的...

44550
来自专栏java学习

面试题54(考察求职者对重载与重写的掌握)

(不定项选择题)4、A,B,C,D 中哪些是 setVar的重载? public class methodover { public void setVa...

35640
来自专栏码云1024

C++ 数组array与vector的比较

66380
来自专栏浪淘沙

java初级笔记----final、static、匿名对象、内部类

一、final 1、final可以用来修饰类,方法,成员变量, 2、final修饰类不可以被继承,但是可以继承其他类。 3、final修饰的方法不可...

19630
来自专栏我和PYTHON有个约会

11.程序编程基础5:输入输出

python提供了3种输入输出标准文件对象,分别为标准输入、标准输出和标准错误;分别对应了sys模块中的sys.stdin,sys.stdout,sys.std...

11420

扫码关注云+社区

领取腾讯云代金券