为了账号安全,请及时绑定邮箱和手机立即绑定

这段代码的输出结果

这段代码的输出结果

JHsssss 2016-11-09 10:50:49
class A {     static {         System.out.print("1");     }    public A() {         System.out.print("2");     } }class B extends A{     static {         System.out.print("a");     }    public B() {         System.out.print("b");     } }public class Hello {     public static void main(String[] args) {         A ab = new B();         ab = new B();     } }为什么是1a2b2b,能说一说原理吗?
查看完整描述

2 回答

?
Home_羁绊

TA贡献4条经验 获得超6个赞

执行顺序:静态代码块(类加载的时候执行,先父类后子类 ) -->构造代码块(先父类后子类 ) -->构造函数 (先父类后子类 )


查看完整回答
6 反对 回复 2016-11-09
已采纳
?
望远

TA贡献1017条经验 获得超1032个赞

像一楼说的静态代码块只会被执行一次(类加载的时候执行静态代码块),实例化子类的时候会先实例化父类,说的清楚一点就是,具体步骤1,先加载父类,,2。加载子类,3.实例化父类,4,实例化子类;所以

A ab = new B(); //输出 1 a 2 b  ;

但是静态代码块只会被执行一次,所以

 ab = new B(); //输出 2 b


查看完整回答
2 反对 回复 2016-11-09
  • 2 回答
  • 1 关注
  • 1363 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信