15.运行下面代码,输出的结果是()

 运行下面代码,输出的结果是()

class A {
    public A() {
        System.out.println("class A");
    }
    { System.out.println("I'm A class"); } 
    static { System.out.println("class A static"); }
}
public class B extends A {
    public B() {
        System.out.println("class B");
    }
    { System.out.println("I'm B class"); }
    static { System.out.println("class B static"); }
     
    public static void main(String[] args) { 
 new B(); 
 }
}
A.
class A static        
class B static           
I'm A class             
class A               
I'm B class 
class B
B.
class A static
I'm A class
class A
class B static
I'm B class
class B
C.
class A static        
class B static           
class A                
I'm A class            
class B               
I'm B class

D.
class A static
class A
I'm A class
class B static
class B
I'm B class

此题选A。

要理解Java程序初始化顺序,就得理解虚拟机从加载、编译、运行一个类的过程:

静态代码域:包括静态变量、静态代码块,这些是随着虚拟机加载得时候就要执行得,且只会执行一次,它们之间得优先级是同等的,根据出现的先后来决定次序。

当运行一个子类程序时,JVM首先会先完成加载:

先父类再子类,所以会先执行父类和子类的静态代码域。

加载完成后,开始编译执行(走main方法入口):

main方法的代码是要new一个子类,所以首先会去初始化父类再去构造子类。而初始化父类的操作是,先是非静态代码块/变量,最后是构造函数。完成了父类的创建后,按照相同的规则去构造子类。

  • 0
    点赞
  • 2
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论

打赏作者

QiuBika_061

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值