国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

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

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

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

載入

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

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

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

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

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

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

連結(jié)

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

驗證

#「驗證階段主要是確保Class檔案的格式正確,運行時不會危害虛擬機器的安全」

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

準(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í)行賦值語句」

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

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

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

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)備階段就會賦值為ConstantValue指定的值」

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

##解析

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

加入我寫了一個如下的類別

public class Student {

    private String name;
    private int age;

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

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

初始化

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

面試官:說一下類別載入的過程(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個方法,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ù)的賦值語句
  2. 執(zhí)行靜態(tài)程式碼區(qū)塊中的語句
  3. 需要注意的一點是,「Java虛擬機會保證子類別的方法執(zhí)行前,父類別的方法已經(jīng)執(zhí)行完畢」

「理解方法的作用還是有必要的,因為經(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驗證一下
  • 「沒有繼承狀況的執(zhí)行順序」
  • 靜態(tài)程式碼區(qū)塊和靜態(tài)成員變量,執(zhí)行順序由編寫順序決定(只會執(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ù))(只會執(zhí)行一次哈)############父類別的非靜態(tài)(構(gòu)造程式碼區(qū)塊,非靜態(tài)成員變數(shù)),父類別的建構(gòu)子############子類別的非靜態(tài)(建構(gòu)程式碼區(qū)塊,非靜態(tài)成員變數(shù)),子類別的建構(gòu)子### ##################卸載################垃圾收集不只發(fā)生在堆中,方法區(qū)上也會發(fā)生。但是對方法區(qū)的型別資料回收的條件比較嚴(yán)苛######以下圖為例,想回收方法區(qū)中的Simple類別###
    1. 需要確保堆中的Sample類別及其子類別都已經(jīng)被回收
    2. #載入Sample類別的MyClassLoader已經(jīng)被回收
    3. Sample類別對應(yīng)的Class物件已經(jīng)被回收面試官:說一下類別載入的過程(10張圖解)

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

    總結(jié)

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

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

    #

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

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

    熱AI工具

    Undress AI Tool

    Undress AI Tool

    免費脫衣圖片

    Undresser.AI Undress

    Undresser.AI Undress

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

    AI Clothes Remover

    AI Clothes Remover

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

    Clothoff.io

    Clothoff.io

    AI脫衣器

    Video Face Swap

    Video Face Swap

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

    熱工具

    記事本++7.3.1

    記事本++7.3.1

    好用且免費的程式碼編輯器

    SublimeText3漢化版

    SublimeText3漢化版

    中文版,非常好用

    禪工作室 13.0.1

    禪工作室 13.0.1

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

    Dreamweaver CS6

    Dreamweaver CS6

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

    SublimeText3 Mac版

    SublimeText3 Mac版

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

    面試官:Spring Aop 常見註解和執(zhí)行順序 面試官:Spring Aop 常見註解和執(zhí)行順序 Aug 15, 2023 pm 04:32 PM

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

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

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

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

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

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

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

    上週,XX保險面試,涼了! ! ! 上週,XX保險面試,涼了! ! ! Aug 25, 2023 pm 03:44 PM

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

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

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

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

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

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

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

    See all articles