亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
##解析" > ##解析
初始化" >初始化
首頁(yè) Java Java面試題 面試官:說一下類別載入的過程(10張圖解)

面試官:說一下類別載入的過程(10張圖解)

Aug 23, 2023 pm 03:05 PM
java面試題

載入

#當(dāng)我們要使用一個(gè)類別的時(shí)候,要透過ClassLoader將類別載入到記憶體中

「類別載入階段主要完成以下三件事情」

  1. 透過全類名,取得類的二進(jìn)位流
  2. 解析類別的二進(jìn)位流為方法區(qū)內(nèi)的資料結(jié)構(gòu)
  3. 建立一個(gè)java.lang.Class類別的實(shí)例,表示該類型,作為方法區(qū)這個(gè)類別的存取入口
面試官:說一下類別載入的過程(10張圖解)

「透過全類別名,取得類別的二進(jìn)位流的方式有很多種”

  1. 從zip壓縮包取得
  2. 從網(wǎng)路取得
  3. 執(zhí)行階段計(jì)算生成,如動(dòng)態(tài)代理技術(shù)
  4. ...

#「對(duì)於非陣列類型的載入階段,也就是可以使用Java虛擬機(jī)器內(nèi)建的類別載入器去完成,也可以使用使用者自訂的類別載入器去完成”

連結(jié)

「連結(jié)這個(gè)階段主要分為3個(gè)部分,驗(yàn)證,準(zhǔn)備,解析」

驗(yàn)證

#「驗(yàn)證階段主要是確保Class檔案的格式正確,運(yùn)行時(shí)不會(huì)危害虛擬機(jī)器的安全」

驗(yàn)證階段的規(guī)則很多,但大致分為如下4個(gè)階段面試官:說一下類別載入的過程(10張圖解)「具體詳細(xì)的內(nèi)容,我就不詳細(xì)解釋了,可以看《深入理解Java虛擬機(jī)》,本篇文章偏向於做一個(gè)總結(jié),把握類別加載的一個(gè)整體流程,而不對(duì)細(xì)節(jié)進(jìn)行闡述”

準(zhǔn)備

「準(zhǔn)備階段主要是為類別的靜態(tài)變數(shù)分配內(nèi)存,並將其初始化為默認(rèn)值”

常見的資料類型的預(yù)設(shè)值如下

#
資料型別 預(yù)設(shè)值
byte # (byte)0
short (short)0
int #0
long 0L
float 0.0f
#double 0.0d
boolean false
char '\u0000'
#參考 null
##########################

「如果類別靜態(tài)變數(shù)的欄位屬性表中存在ConstantValue屬性,則直接執(zhí)行賦值語(yǔ)句」

那麼什麼情況下類別靜態(tài)變數(shù)的欄位屬性表中存在ConstantValue屬性呢?

  1. 類別靜態(tài)變數(shù)為基本資料類型,並且被final修飾
  2. #類別靜態(tài)變數(shù)為String類型,被final修飾,並且以字面量的形式賦值

為了方便查看Class檔案的字節(jié)碼,我在IDEA下載了一個(gè)外掛程式j(luò)classlib Bytecode viewer,非常方便。用以下程式碼透過字節(jié)碼的形式驗(yàn)證一下

public class Person {

    private static int age = 10;
    private static final int length = 160;
    private static final String name = "name";
    private static final String loc = new String("loc");
}

面試官:說一下類別載入的過程(10張圖解)「所以length和name屬性在準(zhǔn)備階段就會(huì)賦值為ConstantValue指定的值」

#「那麼age和loc屬性會(huì)在哪個(gè)階段賦值呢?是在初始化階段,後面會(huì)詳細(xì)介紹哈」面試官:說一下類別載入的過程(10張圖解)

##解析

「將類,接口,字段和方法的符號(hào)引用(在常數(shù)池中)轉(zhuǎn)為直接引用」符號(hào)引用:用一組符號(hào)來(lái)描述所引用的目標(biāo) 直接引用;直接指向指向目標(biāo)的指標(biāo)

加入我寫了一個(gè)如下的類別

public class Student {

    private String name;
    private int age;

    public String getName() {
        return this.name;
    }
}

以欄位為例,name和age對(duì)應(yīng)的物件並不是直接指向記憶體位址,而是用字串來(lái)進(jìn)行描述(即符號(hào)引用)。解析階段就是將這些描述轉(zhuǎn)為直接指向目標(biāo)的指標(biāo)(即直接引用)面試官:說一下類別載入的過程(10張圖解)

初始化

「執(zhí)行類靜態(tài)成員變量賦值語(yǔ)句和靜態(tài)代碼塊中的語(yǔ)句」

面試官:說一下類別載入的過程(10張圖解)

我們把上面的Student代碼改成如下形式

public class Student {

    private String name;
    private int age = 10;
    private static int gender = 1;

    {
        System.out.println("構(gòu)造代碼塊");
    }

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

    public Student() {
        System.out.println("構(gòu)造函數(shù)");
    }

    public String getName() {
        return this.name;
    }
}

可以看到字節(jié)碼中包含了3個(gè)方法,getName方法我們知道,方法里面執(zhí)行了哪些邏輯?面試官:說一下類別載入的過程(10張圖解)從字節(jié)碼的角度分析一波

方法」

面試官:說一下類別載入的過程(10張圖解)

從字節(jié)碼可以看到方法的主要邏輯為

  1. 調(diào)用父類的方法
  2. 非靜態(tài)成員變量賦值
  3. 執(zhí)行構(gòu)造代碼塊
  4. 執(zhí)行構(gòu)造函數(shù)

面試官:說一下類別載入的過程(10張圖解)方法」面試官:說一下類別載入的過程(10張圖解)從字節(jié)碼可以看到方法的主要邏輯為

  1. 執(zhí)行靜態(tài)變數(shù)的賦值語(yǔ)句
  2. 執(zhí)行靜態(tài)程式碼區(qū)塊中的語(yǔ)句
  3. 需要注意的一點(diǎn)是,「Java虛擬機(jī)會(huì)保證子類別的方法執(zhí)行前,父類別的方法已經(jīng)執(zhí)行完畢」

「理解方法的作用還是有必要的,因?yàn)榻?jīng)常有些面試題問靜態(tài)程式碼區(qū)塊,建構(gòu)程式碼區(qū)塊,建構(gòu)子的執(zhí)行順序?!?ol class="list-paddingleft-2" data-tool="mdnice編輯器" style="margin-top: 8px;margin-bottom: 8px;padding-left: 25px;font-size: 15px;color: rgb(89, 89, 89);">
  • #我這裡就直接總結(jié)結(jié)論,大家可以寫demo驗(yàn)證一下
  • 「沒有繼承狀況的執(zhí)行順序」
  • 靜態(tài)程式碼區(qū)塊和靜態(tài)成員變量,執(zhí)行順序由編寫順序決定(只會(huì)執(zhí)行一次哈)
  • 建構(gòu)程式碼區(qū)塊和非靜態(tài)成員變量,執(zhí)行順序由編寫順序決定 #建構(gòu)子

    面試官:說一下類別載入的過程(10張圖解)「有繼承情況的執(zhí)行順序」面試官:說一下類別載入的過程(10張圖解)

    #########父類別的靜態(tài)(靜態(tài)程式碼區(qū)塊,靜態(tài)成員變數(shù)),子類別的靜態(tài)(靜態(tài)程式碼區(qū)塊,靜態(tài)成員變數(shù))(只會(huì)執(zhí)行一次哈)############父類別的非靜態(tài)(構(gòu)造程式碼區(qū)塊,非靜態(tài)成員變數(shù)),父類別的建構(gòu)子############子類別的非靜態(tài)(建構(gòu)程式碼區(qū)塊,非靜態(tài)成員變數(shù)),子類別的建構(gòu)子### ##################卸載################垃圾收集不只發(fā)生在堆中,方法區(qū)上也會(huì)發(fā)生。但是對(duì)方法區(qū)的型別資料回收的條件比較嚴(yán)苛######以下圖為例,想回收方法區(qū)中的Simple類別###
    1. 需要確保堆中的Sample類別及其子類別都已經(jīng)被回收
    2. #載入Sample類別的MyClassLoader已經(jīng)被回收
    3. Sample類別對(duì)應(yīng)的Class物件已經(jīng)被回收面試官:說一下類別載入的過程(10張圖解)

    可以看到對(duì)方法區(qū)的類型資料回收的條件比較苛刻,但是收效甚微,所以有些垃圾收集器不會(huì)對(duì)方法區(qū)的類型資料進(jìn)行回收

    總結(jié)

    類別載入過程面試官:說一下類別載入的過程(10張圖解)

    變數(shù)的賦值過程面試官:說一下類別載入的過程(10張圖解)

    #

    以上是面試官:說一下類別載入的過程(10張圖解)的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

    本網(wǎng)站聲明
    本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

    熱AI工具

    Undress AI Tool

    Undress AI Tool

    免費(fèi)脫衣圖片

    Undresser.AI Undress

    Undresser.AI Undress

    人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

    AI Clothes Remover

    AI Clothes Remover

    用於從照片中去除衣服的線上人工智慧工具。

    Clothoff.io

    Clothoff.io

    AI脫衣器

    Video Face Swap

    Video Face Swap

    使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

    熱工具

    記事本++7.3.1

    記事本++7.3.1

    好用且免費(fèi)的程式碼編輯器

    SublimeText3漢化版

    SublimeText3漢化版

    中文版,非常好用

    禪工作室 13.0.1

    禪工作室 13.0.1

    強(qiáng)大的PHP整合開發(fā)環(huán)境

    Dreamweaver CS6

    Dreamweaver CS6

    視覺化網(wǎng)頁(yè)開發(fā)工具

    SublimeText3 Mac版

    SublimeText3 Mac版

    神級(jí)程式碼編輯軟體(SublimeText3)

    熱門話題

    Laravel 教程
    1597
    29
    PHP教程
    1488
    72
    面試官:Spring Aop 常見註解和執(zhí)行順序 面試官:Spring Aop 常見註解和執(zhí)行順序 Aug 15, 2023 pm 04:32 PM

    你一定知道 Spring , 那說說 Aop 的去全部通知順序, Spring Boot 或 Spring Boot 2 對(duì) aop 的執(zhí)行順序影響?說說你在 AOP 中遇到的那些坑?

    某團(tuán)面試:如果線上遇到了OOM,該如何檢查?如何解決?哪些方案? 某團(tuán)面試:如果線上遇到了OOM,該如何檢查?如何解決?哪些方案? Aug 23, 2023 pm 02:34 PM

    OOM 意味著程式存在漏洞,可能是程式碼或 JVM 參數(shù)配置引起的。這篇文章跟讀者聊聊,Java 進(jìn)程觸發(fā)了 OOM 後如何排查。

    餓了麼筆試題,看似簡(jiǎn)單,難倒一批人 餓了麼筆試題,看似簡(jiǎn)單,難倒一批人 Aug 24, 2023 pm 03:29 PM

    在很多公司的筆試題中,千萬(wàn)別小看,都是有坑的,一不小心自己就掉進(jìn)去了。遇到這種關(guān)於循環(huán)的筆試題,建議,自己冷靜思考,一步一步來(lái)。

    上週,XX保險(xiǎn)面試,涼了! ! ! 上週,XX保險(xiǎn)面試,涼了! ! ! Aug 25, 2023 pm 03:44 PM

    上週,一位群組裡的朋友去平安保險(xiǎn)面試了,結(jié)果有些遺憾,蠻可惜的,但希望你不要?dú)怵H,正如你所說的,面試中遇到的問題,基本上都是可以通過背面試題解決的,所以請(qǐng)加油!

    5道String面試題,能全答對(duì)的人不到10%! (附答案) 5道String面試題,能全答對(duì)的人不到10%! (附答案) Aug 23, 2023 pm 02:49 PM

    這篇來(lái)看看 Java String類別的 5 題面試題,這五題,我自己在面試過程中親身經(jīng)歷過幾題目,本篇就帶你了解這些題的答案為什麼是這樣。

    小白也能與BAT面試官對(duì)線:CAS 小白也能與BAT面試官對(duì)線:CAS Aug 24, 2023 pm 03:09 PM

    Java並發(fā)程式設(shè)計(jì)系列番外篇C A S(Compare and swap),文章風(fēng)格依然是圖文並茂,簡(jiǎn)單易懂,讓讀者們也能與面試官瘋狂對(duì)線。

    幾乎所有Java面試都會(huì)問到的問題:說ArrayList和LinkedList的差別 幾乎所有Java面試都會(huì)問到的問題:說ArrayList和LinkedList的差別 Jul 26, 2023 pm 03:11 PM

    Java的資料結(jié)構(gòu)是面試考察的重點(diǎn),只要參與Java面試的同學(xué)相信都有所體會(huì)。面試官問這類問題的時(shí)候往往是想檢視你是否研究過Java中常用資料類型的底層結(jié)構(gòu),而不是只是簡(jiǎn)單的停留在"會(huì)使用"的層次。

    面試官:說一下類別載入的過程(10張圖解) 面試官:說一下類別載入的過程(10張圖解) Aug 23, 2023 pm 03:05 PM

    當(dāng)我們要使用一個(gè)類別的時(shí)候,要透過ClassLoader將類別載入到記憶體中。

    See all articles