黑马程序员技术交流社区
标题:
基础问题之输出结果!
[打印本页]
作者:
hejinzhong
时间:
2014-9-14 14:30
标题:
基础问题之输出结果!
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[] ars){
A ab = new B();
ab = new B();
}
}
复制代码
作者:
蒙奇.D.路飞
时间:
2014-9-14 15:30
输出结果是:
1
a
2
b
作者:
行进中的蜗牛
时间:
2014-9-14 16:02
输出1a2b2b
作者:
zhappy
时间:
2014-9-14 16:55
A ab = new B();时创建里一遍A与B,显示1a3b
ab = new B(); 又创建了一遍A与B,static只编译一遍,所以只显示2b
作者:
daoqin
时间:
2014-9-14 18:08
输出结果:1a2b2b
作者:
进击的大鹏
时间:
2014-9-14 21:34
静态方法随着类的加载而加载,所以先输出1,a, 然后第一次new B(); 去找父类A的构造函数打印2,然后执行B的构造函数打印b,然后又new B();再打印一次2,b. 静态代码块不再执行因为只加载一次。
作者:
石头-剪刀
时间:
2014-9-15 20:55
在Java中创建对象的时候有如下的执行顺序:
为静态Field分配内存-->静态初始化块-->为变量创建内存-->初始化块-->构造函数,
知道这个顺序后就很容易分析出输出结果
当A ab = new B(); 时,创建B对象,先看B对象的父类A有无static ,再看B类的static,然后再调用B的父类A的构造函数,最后调用B的构造函数
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2