91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java中代碼執行順序

發布時間:2020-07-17 14:16:43 來源:網絡 閱讀:243 作者:靈谷魚 欄目:編程語言

之前對于靜態代碼塊,構造代碼塊,普通代碼塊,以及類的初始化等代碼執行順序一直不是特別清楚,在此整理,方便復習!

執行順序:

  • 父類 -->子類
  • 靜態屬性&靜態代碼塊 -->普通屬性&構造代碼塊-->構造方法 -->普通代碼塊(所在方法被調用才執行)

原因分析:

靜態代碼塊:

  1. 在java中使用static關鍵字聲明的代碼塊{}。
    static {
        System.out.println("靜態代碼塊");
    }
  2. 代碼級別:成員級別
  3. ==在類加載時執行,且只執行一次==
    (對于類加載不是很清楚的小伙伴們可先看這篇博客:類加載)
    class Parent {
    static {
        System.out.println("A");
    }
    Parent(){
        System.out.println("sdfsaf");
    }
    static {
        System.out.println("B");
    }
    }
    public class ExplicitStatic  {
    public static void main(String[] args) {
        new Parent();//第一次執行,觸發了類加載
        System.out.println("=========華麗的分割線=========");
        new Parent();//第二次實例化,不再觸發類的加載,不再執行靜態代碼塊
    }
    }

    運行結果:
    java中代碼執行順序

構造代碼塊:

  1. 直接在類中定義且沒有加static關鍵字的代碼塊稱為{}構造代碼塊。
    public class Test01 {
    {
        System.out.println("我是構造代碼塊");
    }
    public static void main(String[] args) {
        new Test01();
    }
    }
  2. 代碼級別:成員級別
  3. 構造代碼塊在創建對象時被調用,每次創建對象都會被調用
  4. 構造代碼塊的執行次序優先于類構造方法
class Test02{
    {
        System.out.println("我是 父類 構造代碼塊");
    }
}

public class Test01 extends Test02{

    {
        System.out.println("我是 子類 構造代碼塊1");
    }

    Test01(){
        System.out.println("我是無參構造方法");
    }
    Test01(int v){
        System.out.println("我是有參構造方法");
    }

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

    {
        System.out.println("我是 子類 構造代碼塊2");
    }
    public static void main(String[] args) {
        new Test01();
        System.out.println("===================華麗的分割線===================");
        new Test01(6);//每次創建對象都會執行構造代碼塊
    }
}

運行結果:
java中代碼執行順序

普通代碼塊:

  1. 在方法或語句中出現的{}就稱為普通代碼塊。
    public void method() {
        {
            System.out.println("普通代碼塊1");
        }
        ....
    }
  2. 代碼級別:方法級別
  3. 普通代碼塊和一般的語句執行順序由他們在代碼中出現的次序決定--“先出現先執行”
class Test02{
    {
        System.out.println("我是 父類 構造代碼塊");
    }
}

public class Test01 extends Test02{

    {
        System.out.println("我是 子類 構造代碼塊");
    }

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

    public void method(){
        {
            System.out.println("普通代碼塊1");
        }

        System.out.println("普通方法體");

        {
            System.out.println("普通代碼塊2");
        }
    }
    public static void main(String[] args) {
        new Test01();
        System.out.println("===================華麗的分割線===================");
        new Test01().method();//被調用才會執行方法中的代碼塊
    }
}

運行結果:
java中代碼執行順序

類的實例化:

  1. 類的實例化有三部分:屬性,構造代碼塊,構造方法
  2. 屬性的加載和構造代碼塊加載是同等級的,執行順序為書寫順序
  3. 構造方法在前兩種方式加載完之后再執行

總結:

對象實例化時的順序:

1,父類的靜態成員變量和靜態代碼塊加載

2,子類的靜態成員變量和靜態代碼塊加載

3,父類成員變量和構造代碼塊加載

4,父類的構造方法加載

5,子類成員變量和構造代碼塊加載

6,子類的構造方法加載

知識點匯總 ,測試源碼如下:

class Parent2 {
    {
        System.out.println("父類  構造代碼塊1");//5
    }

    Parent2() {
        System.out.println("父類  的無參構造方法");//7
    }

    static {
        System.out.println("父類  的靜態代碼塊1");//1
    }

    {
        System.out.println("父類  構造代碼塊2");//6
    }

    static {
        System.out.println("父類  的靜態代碼塊2");//2
    }
}

public class ExplicitStatic extends Parent2 {

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

    ExplicitStatic() {//15
        super();//可省略
        System.out.println("子類  無參構造方法");//16
    }

    ExplicitStatic(int v) {//14
        this();//即 執行15
        System.out.println("子類  有參構造方法");//17
    }

    private int initA() {
        System.out.println("子類  的屬性初始化調用 普通方法A");//9
        return 0;
    }

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

    private int initB() {
        System.out.println("子類  的屬性初始化調用 普通方法B");//12
        return 0;
    }

    int a = initA();//8

    {
        System.out.println("子類  的構造代碼塊1");//10
    }

    int b = initB();//11

    {
        System.out.println("子類  的構造代碼塊2");//13
    }

    public void method() {
        {
            System.out.println("子類  的普通代碼塊1");
        }
        System.out.println("子類  的普通方法method");
        {
            System.out.println("子類  的普通代碼塊2");
        }
    }

    public static void main(String[] args) {
        new ExplicitStatic(100);
        System.out.println("=================");
        new ExplicitStatic().method();

}

運行結果如圖:

java中代碼執行順序

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

上饶县| 修文县| 景宁| 鸡泽县| 城固县| 天等县| 河曲县| 沙坪坝区| 莱芜市| 北辰区| 泗洪县| 江北区| 皋兰县| 肥东县| 张家界市| 威信县| 镇沅| 周宁县| 马鞍山市| 通许县| 宣城市| 鱼台县| 揭东县| 四会市| 天长市| 洮南市| 呼玛县| 宁波市| 阿瓦提县| 合作市| 平原县| 安泽县| 轮台县| 武穴市| 山丹县| 邵东县| 海原县| 富裕县| 获嘉县| 凤庆县| 云林县|