page contents

下面程序的运行结果是什么

Pack 发布于 2020-01-13 17:39
阅读 524
收藏 0

题目描述

下面程序的运行结果是什么


题目来源及自己的思路

唉,面试题


相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)


public class HelloA {

    public HelloA() {

        System.out.println("HelloA");

    }


    { System.out.println("I'm A class"); }


    static { System.out.println("static A"); }

}



public class HelloB  extends HelloA{

    public HelloB() {

        System.out.println("HelloB");

    }


    { System.out.println("I'm B class"); }


    static { System.out.println("static B"); }


    public static void main(String[] args) {

        System.out.println("-------main start-------");

        new HelloB();

        System.out.println("-------main end-------");

    }

}

你期待的结果是什么?实际看到的错误信息又是什么?

请写出运行结果

180
Pack
Pack

执行结果:

static A

static B

-------main start-------

I’m A class

HelloA

I’m B class

HelloB

-------main end-------

分析:

1、由于A是父类,且A中存在static静态块,静态块会在类加载的时候就执行,所以,先输出 static A ,接着同理B中也有static,所以接着输出static B;

2、接下来,类加载完成后,开始执行main方法,所以输出 -------main start-------

3、进行new HelloB()开始实例化B时,由于继承了A,会先实例化A。且由于A与B都存在构造块儿{}(构造块儿{},会在对象实例化过程时,先于构造方法执行),所以先执行I’m A class ,再输出 HelloA

4、然后开始实例化B ,同理由于{},所以先输出I’m B class,再输出 HelloB

5、最后输出-------main end-------

6、整个过程完成

请先 登录 后评论