" />

欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java基礎(chǔ)之類初始化順序示例解析

 更新時(shí)間:2023年10月07日 15:59:08   作者:bug生產(chǎn)者  
這篇文章主要為大家介紹了java基礎(chǔ)之類初始化順序示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

初始化順序

在類中變量定義的順序決定了它們初始化的順序。在創(chuàng)建任何java對(duì)象時(shí),都是依次調(diào)用父類非靜態(tài)初始化塊、父類構(gòu)造器執(zhí)行初始化、本類的非靜態(tài)初始化塊、本類構(gòu)造器執(zhí)行初始化

public class House {
    // 構(gòu)造器之前
    Window w1 = new Window(1);
    House(){
        System.out.println("House()");
        Window window = new Window(11);
    }
    // 構(gòu)造器之后
    Window w2 = new Window(2);
    void f(){
        System.out.println("f()");
    }
    Window w3 = new Window(3);
    public static void main(String[] args) {
        House house = new House();
        house.f();
    }
}
public class Window {
    public Window(int mark){
        System.out.println("Window("+mark+")");
    }
}

執(zhí)行結(jié)果

Window(1)
Window(2)
Window(3)
House()
Window(11)
f()

由執(zhí)行結(jié)果可知,在進(jìn)行對(duì)象實(shí)例化時(shí)先執(zhí)行初始化塊,再執(zhí)行構(gòu)造器主體部分

驗(yàn)證類加載

public class Initable {
    // 非編譯期常量
    public static final int COUNT =new Random().nextInt(1000);
    static {
        System.out.println("Initable初始化");
    }
}
public class Initable1 {
    // 編譯期常量
    public static final int COUNT = 47;
    static {
        System.out.println("Initable1初始化");
    }
}
public class Initable2 {
    public static int COUNT = 56;
    static {
        System.out.println("Initable2初始化");
    }
}
public class Initable3 {
    public static int COUNT = 33;
    static {
        System.out.println("Initable3初始化");
    }
}
public class Initable4 {
    public static int COUNT = 44;
    static {
        System.out.println("Initable4初始化");
    }
}
public class Test {
    public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
        System.out.println("Initable---------------");
        System.out.println(Initable.COUNT);
        System.out.println("Initable1---------------");
        System.out.println(Initable1.COUNT);
        System.out.println("Initable2---------------");
        System.out.println(Initable2.COUNT);
        System.out.println("Initable3---------------");
        Class<Initable3> clazz = Initable3.class;
        System.out.println("Initable4---------------");
        Class.forName("com.zhanghe.study.init.Initable4");
    }
}

結(jié)果:
Initable---------------
Initable初始化
457
Initable1---------------
47
Initable2---------------
Initable2初始化
56
Initable3---------------
Initable4---------------
Initable4初始化

Initable和Initable1結(jié)果分析

對(duì)于static final的值是一個(gè)編譯期常量的話(如Initable1.COUNT),獲取這個(gè)值時(shí)不需要對(duì)Initable1進(jìn)行初始化就可以讀取,如果用static final的值不是一個(gè)編譯期常量(如Initable.COUNT),訪問這個(gè)變量會(huì)強(qiáng)制對(duì)該類進(jìn)行初始化

Initable2結(jié)果分析

對(duì)于一個(gè)僅僅是static修飾的字段而不是final的,在讀取這個(gè)字段之前,需要為該字段分配存儲(chǔ)空間以及初始化該存儲(chǔ)空間

Initable3和Initable4結(jié)果分析

使用.class語法不會(huì)對(duì)類進(jìn)行初始化,而使用Class.forName()來產(chǎn)生Class引用會(huì)直接引發(fā)類的初始化

注意:如果沒有顯式的編寫構(gòu)造器的話,java編譯器會(huì)默認(rèn)提供一個(gè)無參構(gòu)造器,但是如果提供了自己的構(gòu)造器,編譯器將不會(huì)再生成默認(rèn)構(gòu)造器。

java基礎(chǔ)/面向?qū)ο?4.java基礎(chǔ)之初始化/

以上就是java基礎(chǔ)之類初始化順序示例解析的詳細(xì)內(nèi)容,更多關(guān)于java類初始化的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java中的反射機(jī)制示例詳解

    Java中的反射機(jī)制示例詳解

    反射就是把Java類中的各個(gè)成分映射成一個(gè)個(gè)的Java對(duì)象。本文將通過示例詳細(xì)講解Java中的反射機(jī)制,感興趣的小伙伴可以跟隨小編學(xué)習(xí)一下
    2022-03-03
  • jetbrain?fleet對(duì)標(biāo)vscode實(shí)際操作

    jetbrain?fleet對(duì)標(biāo)vscode實(shí)際操作

    Gradle是一個(gè)基于Apache Ant和Apache Maven概念項(xiàng)目自動(dòng)化構(gòu)建開源工具,jetbrain家的fleet(已獲得預(yù)覽權(quán)限)直接對(duì)標(biāo)vscode?,?fleet有望超過vscode嗎?今天我們實(shí)際操作下
    2021-12-12
  • Java中使用注解獲取和改變Bean的指定變量值

    Java中使用注解獲取和改變Bean的指定變量值

    Java有時(shí)需要通過自定義注解,獲取某Bean的某變量的值,根據(jù)業(yè)務(wù)要求處理數(shù)據(jù),然后再把新值設(shè)置回Bean的同一變量中,這篇文章介紹了使用注解獲取和改變Bean變量值的過程,感興趣想要詳細(xì)了解可以參考下文
    2023-05-05
  • 淺談Java中的private方法是否可以被代理

    淺談Java中的private方法是否可以被代理

    這篇文章主要介紹了淺談Java中的private方法是否可以被代理,在?Java?8之前,接口可以有常量變量和抽象方法,我們不能在接口中提供方法實(shí)現(xiàn),如果我們要提供抽象方法和非抽象方法(方法與實(shí)現(xiàn))的組合,那么我們就得使用抽象類,需要的朋友可以參考下
    2023-12-12
  • mybatis整合ehcache做三級(jí)緩存的實(shí)現(xiàn)方法

    mybatis整合ehcache做三級(jí)緩存的實(shí)現(xiàn)方法

    ehcache是一個(gè)快速內(nèi)存緩存框架,java項(xiàng)目里用起來很方便,下面這篇文章主要給大家介紹了關(guān)于mybatis整合ehcache做三級(jí)緩存的實(shí)現(xiàn)方法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • Java線程池的拒絕策略實(shí)現(xiàn)詳解

    Java線程池的拒絕策略實(shí)現(xiàn)詳解

    這篇文章主要介紹了Java線程池的拒絕策略實(shí)現(xiàn)詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • java 快速實(shí)現(xiàn)異步調(diào)用的操作方法

    java 快速實(shí)現(xiàn)異步調(diào)用的操作方法

    這篇文章主要介紹了java 如何快速實(shí)現(xiàn)異步調(diào)用方法,今天我們就來了解下 CompletableFuture,它Java 8引入的一種功能強(qiáng)大的異步編程工具,可以用于實(shí)現(xiàn)復(fù)雜的異步操作和處理鏈?zhǔn)降漠惒饺蝿?wù),需要的朋友可以參考下
    2023-07-07
  • Java多線程窗口售票問題實(shí)例

    Java多線程窗口售票問題實(shí)例

    這篇文章主要介紹了Java多線程窗口售票問題實(shí)例,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • java8新特性-lambda表達(dá)式入門學(xué)習(xí)心得

    java8新特性-lambda表達(dá)式入門學(xué)習(xí)心得

    這篇文章主要介紹了java8新特性-lambda表達(dá)式入門學(xué)習(xí)心得,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Java數(shù)字格式類(NumberFormat類和DecimalFormat類)用法詳解

    Java數(shù)字格式類(NumberFormat類和DecimalFormat類)用法詳解

    NumberFormat類是Java提供的一個(gè)格式化數(shù)字的類,可以將一串?dāng)?shù)字轉(zhuǎn)化成自己想要的數(shù)據(jù)格式,也可以將字符串轉(zhuǎn)化成數(shù)值,下面這篇文章主要給大家介紹了關(guān)于Java數(shù)字格式類(NumberFormat類和DecimalFormat類)用法的相關(guān)資料,需要的朋友可以參考下
    2022-07-07

最新評(píng)論