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

Java類初始化執(zhí)行流程解析

 更新時(shí)間:2021年05月02日 07:31:18   作者:飄渺紅塵✨  
這篇文章主要介紹了Java類初始化執(zhí)行流程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

 測(cè)試代碼:  

package com.test.ClassLaoderTest;

public  class test1 {
    public static String s_variable = "靜態(tài)變量";
    public String init_variable = "公開的變量";
    private String p_variable = "私有的變量";
    //靜態(tài)代碼塊
    static {
        System.out.println(s_variable);
        System.out.println("靜態(tài)代碼塊初始化執(zhí)行了");
    }

    //初始化代碼塊
    {
        System.out.println(init_variable);
        System.out.println(p_variable);
        System.out.println("初始化代碼塊執(zhí)行淪");
    }

    //構(gòu)造方法
    public test1(){
        System.out.println("我是構(gòu)造方法");
    }

    public static void main(String[] args) {

    }

}

  直接運(yùn)行:

    

  main方法里面不做任何調(diào)用的情況下,自動(dòng)調(diào)用的是靜態(tài)代碼塊和靜態(tài)變量

  (2)調(diào)用靜態(tài)變量和靜態(tài)方法:

    測(cè)試代碼:    

package com.test.ClassLaoderTest;


public class test1 {
    public static String s_variable = "靜態(tài)變量";
    public String init_variable = "公開的變量";
    private String p_variable = "私有的變量";
    //靜態(tài)代碼塊
    static {
        System.out.println(s_variable);
        System.out.println("靜態(tài)代碼塊初始化執(zhí)行了");
    }

    //初始化代碼塊
    {
        System.out.println(init_variable);
        System.out.println(p_variable);
        System.out.println("初始化代碼塊執(zhí)行淪");
    }

    //構(gòu)造方法
    public test1(){
        System.out.println("我是構(gòu)造方法");
    }

    //靜態(tài)方法
    public static void test1(){
        System.out.println("這是靜態(tài)方法");
    }
    public static void main(String[] args) {
        System.out.println(test1.s_variable);
        test1.test1();
    }

}

  運(yùn)行:

  

  結(jié)論:當(dāng)我調(diào)用靜態(tài)方法/靜態(tài)變量時(shí),只會(huì)家在靜態(tài)代碼塊,其余的代碼塊/構(gòu)造方法不會(huì)被加載

  (3)創(chuàng)建對(duì)象:

package com.test.ClassLaoderTest;


public class test1 {
    public static String s_variable = "靜態(tài)變量";
    public String init_variable = "公開的變量";
    private String p_variable = "私有的變量";
    //靜態(tài)代碼塊
    static {
        System.out.println(s_variable);
        System.out.println("靜態(tài)代碼塊初始化執(zhí)行了");
    }

    //初始化代碼塊
    {
        System.out.println(init_variable);
        System.out.println(p_variable);
        System.out.println("初始化代碼塊執(zhí)行了");
    }

    //構(gòu)造方法
    public test1(){
        System.out.println("我是構(gòu)造方法");
    }

    //靜態(tài)方法
    public static void test1(){
        System.out.println("這是靜態(tài)方法");
    }
    public static void main(String[] args) {
        test1 t1 = new test1();
    }

}

  運(yùn)行結(jié)果:

    

  輸出內(nèi)容: 

靜態(tài)變量
靜態(tài)代碼塊初始化執(zhí)行了
公開的變量
私有的變量
初始化代碼塊執(zhí)行了
我是構(gòu)造方法

  結(jié)論:當(dāng)創(chuàng)建對(duì)象/實(shí)例化的時(shí)候,調(diào)用順序:靜態(tài)代碼塊->初始化代碼->構(gòu)造方法,最后執(zhí)行的才是構(gòu)造方法

  (4)有繼承關(guān)系下的類初始化執(zhí)行流程:

   環(huán)境:

    父類:

package com.test.ClassLaoderTest;

public class father {
    public static String s_variable = "父類靜態(tài)變量";
    public String init_variable = "父類公開的變量";
    private String p_variable = "父類私有的變量";
    //父類靜態(tài)代碼塊
    static {
        System.out.println(s_variable);
        System.out.println("父類靜態(tài)代碼塊初始化執(zhí)行了");
    }

    //父類初始化代碼塊
    {
        System.out.println(init_variable);
        System.out.println(p_variable);
        System.out.println("父類初始化代碼塊執(zhí)行了");
    }

    //構(gòu)造方法
    public father(){
        System.out.println("我是父類構(gòu)造方法");
    }

    //父類靜態(tài)方法
    public static void test1(){
        System.out.println("這是父類靜態(tài)方法");
    }
}

    test1.java:

    繼承其父類father:

package com.test.ClassLaoderTest;

public class test1 extends father{
    public static String s_variable = "子類靜態(tài)變量";
    public String init_variable = "子類公開的變量";
    private String p_variable = "子類私有的變量";
    //子類靜態(tài)代碼塊
    static {
        System.out.println(s_variable);
        System.out.println("子類靜態(tài)代碼塊初始化執(zhí)行了");
    }

    //子類初始化代碼塊
    {
        System.out.println(init_variable);
        System.out.println(p_variable);
        System.out.println("子類初始化代碼塊執(zhí)行了");
    }

    //子類構(gòu)造方法
    public test1(){
        System.out.println("我是子類構(gòu)造方法");
    }

    //子類靜態(tài)方法
    public static void test1(){
        System.out.println("這是子類靜態(tài)方法");
    }

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

  main方法不做任何操作,運(yùn)行:

    

 只要extends繼承了,優(yōu)先調(diào)用父類靜態(tài)代碼塊

(5)有繼承關(guān)系下的調(diào)用靜態(tài)方法:

    修改子類即可:

package com.test.ClassLaoderTest;

public class test1 extends father{
    public static String s_variable = "子類靜態(tài)變量";
    public String init_variable = "子類公開的變量";
    private String p_variable = "子類私有的變量";
    //子類靜態(tài)代碼塊
    static {
        System.out.println(s_variable);
        System.out.println("子類靜態(tài)代碼塊初始化執(zhí)行了");
    }

    //子類初始化代碼塊
    {
        System.out.println(init_variable);
        System.out.println(p_variable);
        System.out.println("子類初始化代碼塊執(zhí)行了");
    }

    //子類構(gòu)造方法
    public test1(){
        System.out.println("我是子類構(gòu)造方法");
    }

    //子類靜態(tài)方法
    public static void test1(){
        System.out.println("這是子類靜態(tài)方法");
    }

    public static void main(String[] args) {
        test1.test1();
        father.test1();
    }
}

  運(yùn)行:

      

  結(jié)果:

父類靜態(tài)變量
父類靜態(tài)代碼塊初始化執(zhí)行了
子類靜態(tài)變量
子類靜態(tài)代碼塊初始化執(zhí)行了
這是子類靜態(tài)方法
這是父類靜態(tài)方法

  main方法中,誰優(yōu)先調(diào)用靜態(tài)方法,就優(yōu)先加載誰

 (6)有繼承關(guān)系下的創(chuàng)建對(duì)象:

    代碼:

package com.test.ClassLaoderTest;

public class test1 extends father{
    public static String s_variable = "子類靜態(tài)變量";
    public String init_variable = "子類公開的變量";
    private String p_variable = "子類私有的變量";
    //子類靜態(tài)代碼塊
    static {
        System.out.println(s_variable);
        System.out.println("子類靜態(tài)代碼塊初始化執(zhí)行了");
    }

    //子類初始化代碼塊
    {
        System.out.println(init_variable);
        System.out.println(p_variable);
        System.out.println("子類初始化代碼塊執(zhí)行了");
    }

    //子類構(gòu)造方法
    public test1(){
        System.out.println("我是子類構(gòu)造方法");
    }

    //子類靜態(tài)方法
    public static void test1(){
        System.out.println("這是子類靜態(tài)方法");
    }

    public static void main(String[] args) {
        test1 t1 =new test1();
    }
}

  運(yùn)行:

   

  結(jié)果:

父類靜態(tài)變量
父類靜態(tài)代碼塊初始化執(zhí)行了
子類靜態(tài)變量
子類靜態(tài)代碼塊初始化執(zhí)行了
父類公開的變量
父類私有的變量
父類初始化代碼塊執(zhí)行了
我是父類構(gòu)造方法
子類公開的變量
子類私有的變量
子類初始化代碼塊執(zhí)行了
我是子類構(gòu)造方法

  結(jié)論:通過結(jié)果會(huì)發(fā)現(xiàn),不管是子類還是父類靜態(tài)代碼塊,靜態(tài)代碼塊在哪里都是爸爸級(jí)別,最先加載的,當(dāng)創(chuàng)建test1對(duì)象的時(shí)候,優(yōu)先加載的是父類代碼塊,那么他的初始化執(zhí)行流程如下:父類靜態(tài)代碼塊>子類靜態(tài)代碼塊>父類初始化代碼塊>父類構(gòu)造方法>子類代碼塊>子類構(gòu)造方法

(7) 有繼承關(guān)系下的創(chuàng)建父類對(duì)象:

package com.test.ClassLaoderTest;

public class test1 extends father{
    public static String s_variable = "子類靜態(tài)變量";
    public String init_variable = "子類公開的變量";
    private String p_variable = "子類私有的變量";
    //子類靜態(tài)代碼塊
    static {
        System.out.println(s_variable);
        System.out.println("子類靜態(tài)代碼塊初始化執(zhí)行了");
    }

    //子類初始化代碼塊
    {
        System.out.println(init_variable);
        System.out.println(p_variable);
        System.out.println("子類初始化代碼塊執(zhí)行了");
    }

    //子類構(gòu)造方法
    public test1(){
        System.out.println("我是子類構(gòu)造方法");
    }

    //子類靜態(tài)方法
    public static void test1(){
        System.out.println("這是子類靜態(tài)方法");
    }

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

 運(yùn)行:

  

  結(jié)果:

父類靜態(tài)變量
父類靜態(tài)代碼塊初始化執(zhí)行了
子類靜態(tài)變量
子類靜態(tài)代碼塊初始化執(zhí)行了
父類公開的變量
父類私有的變量
父類初始化代碼塊執(zhí)行了
我是父類構(gòu)造方法

  結(jié)論:優(yōu)先執(zhí)行的是兩個(gè)類的靜態(tài)代碼塊,然后是父類型的代碼塊和構(gòu)造方法,而子類的代碼塊和構(gòu)造方法沒有被執(zhí)行是因?yàn)闆]有實(shí)例化子類,所以肯定是沒有他的,那么只有在創(chuàng)建對(duì)象的時(shí)候,才會(huì)調(diào)用代碼塊和構(gòu)造方法

到此這篇關(guān)于Java類初始化執(zhí)行流程的文章就介紹到這了,更多相關(guān)Java類初始化執(zhí)行流程內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java發(fā)送短信系列之限制發(fā)送頻率

    java發(fā)送短信系列之限制發(fā)送頻率

    這篇文章主要為大家詳細(xì)介紹了java發(fā)送短信系列之限制發(fā)送頻率,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-02-02
  • java虛擬機(jī)原理:類加載過程詳解

    java虛擬機(jī)原理:類加載過程詳解

    這篇文章主要介紹了Java中類加載過程全面解析,具有一定參考價(jià)值,需要的朋友可以了解下,希望能夠給你帶來幫助
    2021-09-09
  • Java RateLimiter的限流詳解

    Java RateLimiter的限流詳解

    這篇文章主要為大家詳細(xì)介紹了Java RateLimiter的限流,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • java獲取包下被指定注解的類過程解析

    java獲取包下被指定注解的類過程解析

    這篇文章主要介紹了java獲取包下被指定注解的類過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • 最新log4j2遠(yuǎn)程代碼執(zhí)行漏洞(附解決方法)

    最新log4j2遠(yuǎn)程代碼執(zhí)行漏洞(附解決方法)

    Apache?Log4j2?遠(yuǎn)程代碼執(zhí)行漏洞攻擊代碼,該漏洞利用無需特殊配置,經(jīng)多方驗(yàn)證,Apache?Struts2、Apache?Solr、Apache?Druid、Apache?Flink等均受影響,本文就介紹一下解決方法
    2021-12-12
  • Spring依賴注入(DI)兩種方式的示例詳解

    Spring依賴注入(DI)兩種方式的示例詳解

    這篇文章主要介紹了Spring依賴注入(DI)的兩種方式:setter注入和構(gòu)造器注入。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-06-06
  • SpringBoot項(xiàng)目啟動(dòng)時(shí)提示程序包不存在和找不到符號(hào)的處理方法

    SpringBoot項(xiàng)目啟動(dòng)時(shí)提示程序包不存在和找不到符號(hào)的處理方法

    最近接手同事開發(fā)的一個(gè)Springboot工作項(xiàng)目,從svn上整體拉取下來后,構(gòu)建完成后,啟動(dòng)的時(shí)候遇到了程序包找不到的情況,所以本文記錄了SpringBoot項(xiàng)目啟動(dòng)時(shí)提示程序包不存在和找不到符號(hào)的處理方法,需要的朋友可以參考下
    2024-05-05
  • Java中如何調(diào)用cmd壓縮文件

    Java中如何調(diào)用cmd壓縮文件

    以下是對(duì)Java調(diào)用cmd壓縮文件的實(shí)現(xiàn)方法進(jìn)行了分析介紹,需要的朋友可以參考下
    2013-07-07
  • java代碼之謎運(yùn)算符篇

    java代碼之謎運(yùn)算符篇

    從最簡(jiǎn)單的運(yùn)算符加號(hào)(+)說起,加號(hào)(+)是個(gè)二元運(yùn)算符——也就是說,加號(hào)只把兩個(gè)數(shù)聯(lián)接起來,從來不把第三個(gè)或者更多的聯(lián)接起來
    2012-11-11
  • Java注解詳解之@Override注解

    Java注解詳解之@Override注解

    這篇文章主要給大家介紹了關(guān)于Java注解之@Override注解的相關(guān)資料,@Override是Java中的一個(gè)注解,表示一個(gè)方法是重寫(Override)了父類中的方法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11

最新評(píng)論