1. 程式人生 > >類與物件-動手動腦3

類與物件-動手動腦3

類的靜態初始化塊的執行順序class Root
{
    static{
        System.out.println("Root的靜態初始化塊");
    }
    {
        System.out.println("Root的普通初始化塊");
    }
    public Root()
    {
        System.out.println("Root的無引數的構造器");
    }
}
class Mid extends Root
{
    static{
        System.out.println("Mid的靜態初始化塊");
    }
    {
        System.out.println(
"Mid的普通初始化塊"); } public Mid() { System.out.println("Mid的無引數的構造器"); } public Mid(String msg) { //通過this呼叫同一類中過載的構造器 this(); System.out.println("Mid的帶引數構造器,其引數值:" + msg); } } class Leaf extends Mid { static{ System.out.println("Leaf的靜態初始化塊"); } { System.out.println(
"Leaf的普通初始化塊"); } public Leaf() { //通過super呼叫父類中有一個字串引數的構造器 super("Java初始化順序演示"); System.out.println("執行Leaf的構造器"); } } public class TestStaticInitializeBlock { public static void main(String[] args) { new Leaf(); } }

執行結果:

Root的無引數的構造器

Mid的普通初始化塊

Mid的無引數的構造器

Mid的帶引數構造器,其引數值:Java初始化順序演示

Leaf的普通初始化塊

執行Leaf的構造器

靜態初始化塊的執行順序:

1.靜態初始化塊只執行一次

2.建立子型別的物件時,也會導致父型別的靜態初始化塊的執行。