小编CKR*_*666的帖子

在使用继承时,静态块和初始化块以什么顺序执行?

我有两个班级父母和孩子

public class Parent {    
    public Parent() {
        System.out.println("Parent Constructor");
    }    
    static {
        System.out.println("Parent static block");    
    }    
    {
        System.out.println("Parent initialisation  block");
    }
}

public class Child extends Parent {    
    {
        System.out.println("Child initialisation block");
    }
    static {
        System.out.println("Child static block");
    }

    public Child() {
        System.out.println("Child Constructor");
    }    
    public static void main(String[] args) {
        new Child();    
    }
}
Run Code Online (Sandbox Code Playgroud)

上面代码的输出将是

Parent static block
Child static block
Parent initialization  block
Parent Constructor
Child initialization block
Child Constructor
Run Code Online (Sandbox Code Playgroud)

为什么Java按该顺序执行代码?确定执行顺序的规则是什么?

java inheritance constructor static-block

81
推荐指数
5
解决办法
6万
查看次数

可以解释输出是如何产生的吗?

public class A {
  public A(){
    System.out.println("A created");        
  }
  public static void main(String[] args) {
    new B();
  }
}

class B extends A{
    public B(){
        System.out.println("B created");
    }       
}
Run Code Online (Sandbox Code Playgroud)

上述程序的输出将是

A created

B created
Run Code Online (Sandbox Code Playgroud)

我无法理解如何调用构造函数A().在B()中没有超级调用.但仍然调用A().

java inheritance constructor

0
推荐指数
1
解决办法
99
查看次数

标签 统计

constructor ×2

inheritance ×2

java ×2

static-block ×1