亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解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類的無(wú)參構(gòu)造初始化");
    }
}

輸出:

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

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

分析如下:

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

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

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

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

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

會(huì)發(fā)生類的初始化的場(chǎng)景

類的主動(dòng)引用(一定會(huì)發(fā)生類的初始化)

類的主動(dòng)引用

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類被加載
子類被加載

反射也會(huì)產(chǎn)生主動(dòng)引用

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類被加載
子類被加載

類的被動(dòng)引用(不會(huì)發(fā)生類的初始化)

當(dāng)訪問一個(gè)靜態(tài)域時(shí),只有真正聲明這個(gè)域的類才會(huì)被初始化,如:當(dāng)通過子類引用父類的靜態(tài)變量,不會(huì)導(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ù)組定義類引用,不會(huì)觸發(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類被加載

引用常量不會(huì)觸發(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類加載與初始化的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java 實(shí)戰(zhàn)項(xiàng)目錘煉之嘟嘟健身房管理系統(tǒng)的實(shí)現(xiàn)流程

    Java 實(shí)戰(zhàn)項(xiàng)目錘煉之嘟嘟健身房管理系統(tǒng)的實(shí)現(xiàn)流程

    讀萬(wàn)卷書不如行萬(wàn)里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+SSM+jsp+mysql+maven實(shí)現(xiàn)一個(gè)健身房管理系統(tǒng),大家可以在過程中查缺補(bǔ)漏,提升水平
    2021-11-11
  • Java中的CopyOnWriteArrayList你了解嗎

    Java中的CopyOnWriteArrayList你了解嗎

    CopyOnWriteArrayList是Java集合框架中的一種線程安全的List實(shí)現(xiàn),這篇文章主要來(lái)和大家聊聊CopyOnWriteArrayList的簡(jiǎn)單使用,需要的可以參考一下
    2023-06-06
  • mybatis plus in方法使用詳解

    mybatis plus in方法使用詳解

    這篇文章主要介紹了mybatis plus in方法使用詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • java格式化數(shù)字操作 NumberFormat及DecimalFormat

    java格式化數(shù)字操作 NumberFormat及DecimalFormat

    這篇文章主要介紹了java格式化數(shù)字操作 NumberFormat及DecimalFormat,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java工作環(huán)境的配置與Eclipse的安裝過程

    Java工作環(huán)境的配置與Eclipse的安裝過程

    這篇文章主要介紹了Java工作環(huán)境的配置與Eclipse的安裝過程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • Java分層概念詳解

    Java分層概念詳解

    這篇文章主要介紹了Java分層概念詳解,內(nèi)容十分詳細(xì),在這里給大家分享下,需要的朋友可以參考。
    2017-09-09
  • 解決fastjson泛型轉(zhuǎn)換報(bào)錯(cuò)的解決方法

    解決fastjson泛型轉(zhuǎn)換報(bào)錯(cuò)的解決方法

    這篇文章主要介紹了解決fastjson泛型轉(zhuǎn)換報(bào)錯(cuò)的解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • MyBatis攔截器原理探究

    MyBatis攔截器原理探究

    MyBatis提供了一種插件(plugin)的功能,雖然叫做插件,但其實(shí)這是攔截器功能.這篇文章主要介紹了MyBatis攔截器原理探究,需要的朋友可以參考下
    2018-02-02
  • Mybatis流式查詢之ResultHanlde問題

    Mybatis流式查詢之ResultHanlde問題

    這篇文章主要介紹了Mybatis流式查詢之ResultHanlde問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Spring Cloud Alibaba之Sentinel實(shí)現(xiàn)熔斷限流功能

    Spring Cloud Alibaba之Sentinel實(shí)現(xiàn)熔斷限流功能

    這篇文章主要介紹了Spring Cloud Alibaba之Sentinel,這里使用阿里的sentinel來(lái)實(shí)現(xiàn)熔斷限流功能,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04

最新評(píng)論