Java 類的初始化和實例的初始化

Java 類的初始化和實例的初始化

類的初始化

  • 一個子類初始化要先初始化他的父類

  • 一個類初始化就是執行clinit方法

在這裏插入圖片描述

  • 這裏我們注意 這裏的初始化是對靜態變量和靜態代碼塊進行初始化 而他們兩執行的先後順序就是看誰寫在前面 誰寫在後面

實例的初始化

實例的初始化就是執行init方法

  • init方法由3部分組成 分別是 非靜態的實例變量 非靜態代碼塊 對應構造器代碼組成
  • 非靜態實例變量的賦值和非靜態代碼塊從上到下按順序執行 對應的構造器代碼最後執行
  • init方法首先執行父類的init方法

總結

  • 觸發初始化的執行順序
    1)父類的靜態成員變量和static代碼塊
    2)子類的靜態成員變量和static代碼塊
    3)父類的普通成員變量和非static代碼塊
    4)父類的構造方法
    5)子類的普通成員變量和非static代碼塊
    6)子類的構造方法

我們來看一個例子

package com.zyk;

class HelloA {
    private static  int i=method();

    public static int method(){
        System.out.println("父類的靜態變量");
        return 1;
    }

    public HelloA() {
        System.out.println("HelloA");
    }

    { System.out.println("I'm A class"); }

    static { System.out.println("父類的靜態代碼塊  static A"); }
}
public class HelloB extends HelloA {
    private static  int i=method();

    public static int method(){
        System.out.println("子類的靜態變量");
        return 1;
    }
    public HelloB() {
        System.out.println("HelloB");
    }

    { System.out.println("I'm B class"); }

    static { System.out.println("子類的靜態代碼塊  static B"); }

    public static void main(String[] args) {
        new HelloB();
    }
}

運行結果

父類的靜態變量
父類的靜態代碼塊  static A
子類的靜態變量
子類的靜態代碼塊  static B
I'm A class
HelloA
I'm B class
HelloB
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章