黑马程序员技术交流社区
标题:
新手求大神解答
[打印本页]
作者:
老司机喔
时间:
2016-5-2 17:55
标题:
新手求大神解答
看程序写结果
class Demo2 {
public static void main(String[] args) {
Man m=new Man();
}
}
class person {
static {
System.out.println("a");
}
{
System.out.println("b");
}
public person() {
System.out.println("c");
}
}
class Man extends person {
static {
System.out.println("d");
}
{
System.out.println("e");
}
public Man() {
System.out.println("f");
}
}
为什么运行的结果是a-d-b-c-e-f
作者:
lvaenet1
时间:
2016-5-2 18:08
优先级的原因吧
作者:
feixiang666
时间:
2016-5-2 18:12
只要虚拟机已加载类,静态代码块就会执行,且静态代码块是优先于主方法执行的,
作者:
feixiang666
时间:
2016-5-2 18:22
只要虚拟机已加载类,静态代码块就会执行,且静态代码块是优先于主方法执行的,普通代码块和一般的语句执行顺序由他们在代码中出现的次序决定--“先出现先执行”
作者:
单曲循环1992
时间:
2016-5-2 18:22
从main函数为代码的入口,是创建了一个Man的对象,所以去找Man类,但是Man类是继承person类,所以在子类的静态代码块中,系统都会默认的super()父类中的静态代码块,所以先是输出a,然后输出d.
然后再看构造代码块,可以把构造代码块中的代码复制到构造方法中,又因为子类中系统默认有个super(),所以第三,四个输出的是b,c,第五,六个是e,f
其实只要记住那三句话,就妥妥的了.
1.静态优先于非静态
2.父类优先于子类
3.构造代码块优先于构造方法
谢谢.....
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2