- class Fu {
- static {
- System.out.println("静态代码块Fu");
- }
- {
- System.out.println("构造代码块Fu");
- }
- public Fu() {
- System.out.println("构造方法Fu");
- }
- }
-
- class Zi extends Fu {
- static {
- System.out.println("静态代码块Zi");
- }
- {
- System.out.println("构造代码块Zi");
- }
- public Zi() {
- System.out.println("构造方法Zi");
- }
- }
- class Demo {
- public static void main(String[] args) {
- Zi z = new Zi();
- }
- }
复制代码 打印结果为:
我感觉结果应该是:
静态代码块Fu
静态代码块Zi
构造代码块Zi
构造代码块Fu
构造方法Fu
构造方法Zi
静态代码块是随着类的加载而加载进来的,然后在调用Zi(){}之前,不应该是先调用的Zi类中的构造代码块{}吗?
这样的话,就是“构造代码块Zi”先打印出来。
然后执行Zi(){},里面默认第一行super();
找Fu类,在调用Fu(){}之前,同样先调用Fu类中的构造代码块,打印"构造代码块Fu"。
然后执行Fu(){},打印“构造方法Fu”。
最后就是打印“构造方法Zi”。
求解哪里出了问题?
|
|