欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

类的加载和初始化

程序员文章站 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的加载初始化顺序遵循的规则一般是:父类静态代码块-子类静态代码块-父类代码块-子类代码块-父类构造方法-子类构造方法的顺序。

所以,本题的答案应该是:

爷爷在静态代码块
爸爸在静态代码块
儿子在静态代码块
我是爷爷~
爸爸在干啥
我是爸爸~
儿子在干啥
我是儿子~
相关标签: java底层