標籤:執行 stat com ... 代碼 field 繼承 代碼塊 oid
package com.cwcec.test;class Fu{ int num = 5; //構造代碼塊 { System.out.println("Fu constructor code..." + num); num=6; } public Fu() { System.out.println("Fu constructor ..." + num); show(); } void show() { System.out.println("show ..." + num); } }class Zi extends Fu{ int num = 9; //構造代碼塊 { System.out.println("Zi constructor code..." + num); num = 10; } public Zi() { System.out.println("Zi constructor ..." + num); } void show() { System.out.println("show ..." + num); }}public class FieldDemo { public static void main(String[] args) { new Zi(); } } Output:Fu constructor code...5Fu constructor ...6show ...0Zi constructor code...9Zi constructor ...10
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class Animal{ public String name = "Ti"; public static int age = 10; static { System.out.println("Animal age : " + age); } public Animal() { age = 100; System.out.println("Animal constructor..."); } public void display() { System.out.println("name: " + name); } }class Dog extends Animal{ public static int size = 20; static { System.out.println("Dog size : " + size); } public Dog() { size = 200; System.out.println("Dog constructor..."); } public static void sleep() { System.out.println("Dog sleep..."); } }public class Single{ public static void main(String[] args) { Dog dog = new Dog(); }}
總結
1.執行的大致順序如下,
(1) 在一個不存在繼承的類中:初始化static變數,執行static初始化快-->初始化普通成員變數(如果有指派陳述式),執行普通初始化塊-->構造方法
(2)在一個存在繼承的類中:初始化父類static成員變數,運行父類static初始化塊-->初始化子類static成員變數,運行子類static初始化塊-->初始化父類執行個體成員變數(如果有指派陳述式),執行父類普通初始化塊-->父類構造方法-->初始化子類執行個體成員變數(如果有指派陳述式)及普通初始化塊-->子類構造方法。
Java 成員初始化順序