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方法>構造代碼塊>構造方法。
其中靜態代碼塊只執行一次。構造代碼塊在每次創建對象是都會執行。