最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Java中類的加載與其初始化

 更新時(shí)間:2022年12月15日 09:34:47   作者:從未止步..  
這篇文章主要為大家詳細(xì)介紹了Java中類的加載與其初始化的相關(guān)資料,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以了解一下

java內(nèi)存分析

類加載的過程

類的加載與ClassLoader的理解

類的初始化

package Collections;
public class text1 {
public static void main(String[]args){
    A a=new A();
    System.out.println(A.m);
}
}
class A{
    static {
        System.out.println("A類靜態(tài)代碼塊初始化");
        m=300;
    }
    static int m=100;
    public A(){
        System.out.println("A類的無參構(gòu)造初始化");
    }
}

輸出:

A類靜態(tài)代碼塊初始化
A類的無參構(gòu)造初始化
100

為什么最終輸出的m值為100呢?

分析如下:

首先類進(jìn)行加載和鏈接,如下所示:

注:在鏈接階段的準(zhǔn)備工作時(shí),編譯器會為類變量賦默認(rèn)值為0,即此時(shí)的m為0

鏈接完畢后進(jìn)行類的初始化,這一過程將會執(zhí)行類構(gòu)造器()方法,將類中所有類變量的賦值語句以及靜態(tài)代碼塊中的語句收集和合并:

 <clinit>() {
        System.out.println("A類靜態(tài)代碼塊初始化");
        m=300;
        m=100;
    }

第二條m的賦值語句,覆蓋了第一條的300,因此最終輸出為100

會發(fā)生類的初始化的場景

類的主動引用(一定會發(fā)生類的初始化)

類的主動引用

package Collections;

import static Collections.Son.m;

public class text1 {
    static {
        System.out.println("Main類被加載");
    }
public static void main(String[]args) throws ClassNotFoundException {
    Son son=new Son();
}
}
class Father{
    static int a=10;
    static{
        System.out.println("Father類被加載");
    }
}
class Son extends Father{
static {
        System.out.println("子類被加載");
        m= 300;
}
    static int m =100;
    static final int M = 1;
}

輸出:

Main類被加載
Father類被加載
子類被加載

反射也會產(chǎn)生主動引用

package Collections;

import static Collections.Son.m;

???????public class text1 {
    static {
        System.out.println("Main類被加載");
    }
public static void main(String[]args) throws ClassNotFoundException {
    Class.forName("Collections.Son");
}
}
class Father{
    static int a=10;
    static{
        System.out.println("Father類被加載");
    }
}
class Son extends Father{
static {
        System.out.println("子類被加載");
        m= 300;
}
    static int m =100;
    static final int M = 1;
}

輸出:

Main類被加載
Father類被加載
子類被加載

類的被動引用(不會發(fā)生類的初始化)

當(dāng)訪問一個靜態(tài)域時(shí),只有真正聲明這個域的類才會被初始化,如:當(dāng)通過子類引用父類的靜態(tài)變量,不會導(dǎo)致子類初始化。

舉例:

package Collections;

import static Collections.Son.m;

???????public class text1 {
    static {
        System.out.println("Main類被加載");
    }
public static void main(String[]args) throws ClassNotFoundException {
    System.out.println(Son.a);
}
}
class Father{
    static int a=10;
    static{
        System.out.println("Father類被加載");
    }
}
class Son extends Father{
static {
        System.out.println("子類被加載");
        m= 300;
}
    static int m =100;
    static final int M = 1;
}

輸出:

Main類被加載
Father類被加載
10

通過數(shù)組定義類引用,不會觸發(fā)此類的初始化

舉例:

package Collections;

import static Collections.Son.m;

???????public class text1 {
    static {
        System.out.println("Main類被加載");
    }
public static void main(String[]args) throws ClassNotFoundException {
    Son[] arry=new Son[5];
}
}
class Father{
    static int a=10;
    static{
        System.out.println("Father類被加載");
    }
}
class Son extends Father{
static {
        System.out.println("子類被加載");
        m= 300;
}
    static int m =100;
    static final int M = 1;
}

輸出:

Main類被加載

引用常量不會觸發(fā)此類的初始化(常量在鏈接階段就存入調(diào)用類的常量池中了)

舉例:

package Collections;

import static Collections.Son.m;

???????public class text1 {
    static {
        System.out.println("Main類被加載");
    }
public static void main(String[]args) throws ClassNotFoundException {
    System.out.println(Son.M);
}
}
class Father{
    static int a=10;
    static{
        System.out.println("Father類被加載");
    }
}
class Son extends Father{
static {
        System.out.println("子類被加載");
        m= 300;
}
    static int m =100;
    static final int M = 1;
}

輸出:

Main類被加載
???????1

以上就是詳解Java中類的加載與其初始化的詳細(xì)內(nèi)容,更多關(guān)于Java類加載與初始化的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Spring?security?oauth2以redis作為tokenstore及jackson序列化失敗問題

    Spring?security?oauth2以redis作為tokenstore及jackson序列化失敗問題

    這篇文章主要介紹了Spring?security?oauth2以redis作為tokenstore及jackson序列化失敗問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教<BR>
    2024-04-04
  • 深入理解Java注解的使用方法

    深入理解Java注解的使用方法

    這篇文章主要為大家詳細(xì)介紹了Java注解的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • SpringBoot系列教程JPA之基礎(chǔ)環(huán)境搭建的方法

    SpringBoot系列教程JPA之基礎(chǔ)環(huán)境搭建的方法

    這篇文章主要介紹了SpringBoot系列教程JPA之基礎(chǔ)環(huán)境搭建的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • Java動態(tài)線程池插件dynamic-tp集成zookeeper

    Java動態(tài)線程池插件dynamic-tp集成zookeeper

    ZooKeeper是一個分布式的,開放源碼的分布式應(yīng)用程序協(xié)調(diào)服務(wù),是Google的Chubby一個開源的實(shí)現(xiàn),是Hadoop和Hbase的重要組件。它是一個為分布式應(yīng)用提供一致性的軟件,提供的功能包括:配置維護(hù)、域名服務(wù)、分布式同步、組服務(wù)等
    2023-03-03
  • springboot集成nacos的配置方法

    springboot集成nacos的配置方法

    這篇文章主要介紹了springboot集成nacos的配置方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • Springboot利用Redis實(shí)現(xiàn)接口冪等性攔截

    Springboot利用Redis實(shí)現(xiàn)接口冪等性攔截

    這篇文章主要為大家介紹了Springboot如何利用Redis實(shí)現(xiàn)接口冪等性攔截。本文將通過自定義注解+redis+攔截器+MD5?實(shí)現(xiàn),感興趣的可以了解一下
    2022-06-06
  • Java中的DecimalFormat用法解析

    Java中的DecimalFormat用法解析

    這篇文章主要介紹了Java中的DecimalFormat用法解析,DecimalFormat是Java中用于格式化數(shù)字的類,它提供了一種簡單而靈活的方式來格式化數(shù)字,包括指定小數(shù)位數(shù)、千位分隔符、貨幣符號等,需要的朋友可以參考下
    2023-10-10
  • 詳解Java如何通過Socket實(shí)現(xiàn)查詢IP

    詳解Java如何通過Socket實(shí)現(xiàn)查詢IP

    在本文中,我們來學(xué)習(xí)下如何找到連接到服務(wù)器的客戶端計(jì)算機(jī)的IP地址。我們將創(chuàng)建一個簡單的客戶端-服務(wù)器場景,讓我們探索用于TCP/IP通信的java.net?API,感興趣的可以了解一下
    2022-10-10
  • java單機(jī)接口限流處理方案詳解

    java單機(jī)接口限流處理方案詳解

    這篇文章主要為大家詳細(xì)介紹了java單機(jī)接口限流處理方案,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • SpringBoot中@RestControllerAdvice注解實(shí)現(xiàn)全局異常處理類

    SpringBoot中@RestControllerAdvice注解實(shí)現(xiàn)全局異常處理類

    這篇文章主要介紹了SpringBoot中@RestControllerAdvice注解全局異常處理類,springboot中使用@RestControllerAdvice注解,完成優(yōu)雅的全局異常處理類,可以針對所有異常類型先進(jìn)行通用處理后再對特定異常類型進(jìn)行不同的處理操作,需要的朋友可以參考下
    2024-01-01

最新評論

睢宁县| 霍邱县| 嘉兴市| 北流市| 霍林郭勒市| 桂平市| 泽库县| 兖州市| 芷江| 巴青县| 阿坝| 资兴市| 上犹县| 平潭县| 璧山县| 安国市| 色达县| 广德县| 额尔古纳市| 汶川县| 莱州市| 观塘区| 白山市| 班玛县| 昌江| 宁德市| 昭觉县| 巩义市| 九台市| 南郑县| 景泰县| 焦作市| 黎平县| 乐亭县| 独山县| 绥宁县| 繁昌县| 武强县| 循化| 花莲县| 和林格尔县|