类的加载和初始化
程序员文章站
2022-05-12 11:27:38
...
今天面试了几个新进员工。老大要求多考察java基础,所以就搬出了一些比较经典的面试题。其中有一道题,是关于类的加载和初始化的。代码如下:
class Grandpa
{
static
{
System.out.println("爷爷静态代码");
}
public Grandpa() {
System.out.println("我是爷爷~");
}
}
class Father extends Grandpa
{
static
{
System.out.println("爸爸静态代码");
}
{
System.out.println("爸爸在干啥");
}
public Father()
{
System.out.println("我是爸爸~");
}
}
class Son extends Father
{
static
{
System.out.println("儿子在静态代码块");
}
{
System.out.println("儿子在干啥");
}
public Son()
{
System.out.println("我是儿子~");
}
}
class InitializationDemo
{
public static void main(String[] args)
{
new Son(); //测试入口
}
}
请你写出输出的字符串答案?
一般来说,如果java的加载机制不熟悉的话,是无法把这道题答正确的,因为即便是蒙,也通过不了(答出来后还要说出原因)。所以对这种题目来说,一定要耐着性子去学习java的底层,并且多总结。一言蔽之,java的加载初始化顺序遵循的规则一般是:父类静态代码块-子类静态代码块-父类代码块-子类代码块-父类构造方法-子类构造方法的顺序。
所以,本题的答案应该是:
爷爷在静态代码块
爸爸在静态代码块
儿子在静态代码块
我是爷爷~
爸爸在干啥
我是爸爸~
儿子在干啥
我是儿子~
下一篇: ArrayList中的remove方法
推荐阅读
-
JavaEE基础day02 1.定义Java中的变量 四类八种 2.变量定义和使用的注意事项 3.数据类型的转换、强制数据类型转换4.算数运算符、比较运算符、逻辑运算符、赋值运算符、三元运算符
-
PHP通过反射动态加载第三方类和获得类源码的实例
-
asp.net 时间类 一周的周一和周末的日期
-
搜索和替换文件或目录的一个好类--很实用_PHP教程
-
PHP操作文件类的函数代码(文件和文件夹创建,复制,移动和删除)_php技巧
-
python类中super()和__init__()的区别
-
请问下搜读和快眼看书一类小说搜索网站的原理
-
ThinkPHP中__initialize()和类的构造函数__construct()用法分析_php实例
-
python 类中的单下划线和双下划线的意义
-
tensorflow三种模型的加载和保存的方法(.ckpt,.pb,SavedModel)