下面这个代码的执行顺序,你觉得应该是怎样的呢?
package com.money.provider;
class HelloA{
public HelloA() {
System.out.println("HelloA");
}
{
System.out.println("HelloA 1");
}
static {
System.out.println("HelloA static");
}
}
public class HelloB extends HelloA {
public HelloB() {
System.out.println("HelloB");
}
{
System.out.println("HelloB 1");
}
static {
System.out.println("HelloB static");
}
public static void main(String[] args) {
new HelloB();
}
}
在Java中,当一个类被加载时,以下顺序被执行:
静态代码块 :静态代码块在类加载时执行,且仅执行一次。在 HelloA 和 HelloB 类中,静态代码块分别是 HelloA static 和 HelloB static,它们会在类加载时按照代码顺序执行。
非静态代码块:非静态代码块在每次创建实例时都会执行,并且在构造方法之前执行。在 HelloA 类中,非静态代码块是 HelloA 1,在 HelloB 类中,非静态代码块是 HelloB 1。
构造方法:构造方法用于初始化对象,会在非静态代码块执行完毕后执行。在 HelloA 类中,构造方法输出 HelloA,在 HelloB 类中,构造方法输出 HelloB。
所以答案是:
HelloA static
HelloB static
HelloA 1
HelloA
HelloB 1
HelloB