public class Main {
public static void main(String[] args) {
System.out.println("main start---------");
new B();
new A();
System.out.println("main end---------");
}
}
class A{
public A() {
System.out.println("Hello A");
}
{
System.out.println("I'm A");
}
static {
System.out.println("I'm static A");
}
}
class B extends A{
public B() {
System.out.println("Hello B");
}
{
System.out.println("I'm B");
}
static {
System.out.println("I'm static B");
}
}
//输出结果:
main start---------
I'm static A
I'm static B
I'm A
Hello A
I'm B
Hello B
I'm A
Hello A
main end---------
class A{
public A() {
System.out.println("构造 A");
}
{
System.out.println("A block");
}
static {
System.out.println("static A block");
}
}
public class B extends A{
public B() {
System.out.println("构造 B");
}
{
System.out.println("B block");
}
static {
System.out.println("static B block");
}
public static void main(String[] args) {
System.out.println("-----main start-------");
new B();
new A();
System.out.println("-----main end---------");
}
}
//执行结果:
static A block
static B block
-----main start-------
A block
构造 A
B block
构造 B
A block
构造 A
-----main end---------
//执行顺序:(优先级从高到低。)静态代码块>mian方法>构造代码块>构造方法。
其中静态代码块只执行一次。构造代码块在每次创建对象是都会执行。