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

java如何不通過構(gòu)造函數(shù)創(chuàng)建對(duì)象(Unsafe)

 更新時(shí)間:2024年03月25日 10:26:40   作者:子♂衿  
這篇文章主要介紹了java如何不通過構(gòu)造函數(shù)創(chuàng)建對(duì)象(Unsafe)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

java中不通過構(gòu)造函數(shù)創(chuàng)建對(duì)象

(也有說不創(chuàng)建對(duì)象直接執(zhí)行成員方法)

這里就不和你們扯什么通過 反序列化、clone等方法了 個(gè)人覺得都是在胡扯。

如何不執(zhí)行構(gòu)造函數(shù)創(chuàng)建對(duì)象?

先來帶大家認(rèn)識(shí)一個(gè)類 sun.misc.Unsafe 該類主要提供一些直接訪問系統(tǒng)內(nèi)存資源等等(學(xué)過C語言的應(yīng)該知道和C語言中的指針一樣),但是由于此類能夠直接操作內(nèi)存,這無疑也增加了程序的安全風(fēng)險(xiǎn)。所以技術(shù)不是那么好的千萬不要在應(yīng)用中直接使用喲。

從上圖可以看出 java是不允許直接創(chuàng)建該類對(duì)象的,但是我們可以看到第一個(gè)紅框哪里明顯有個(gè)Unsafe類的對(duì)象,該類是單例的。 那么怎么獲取該類的實(shí)例呢?

注意:本版較低的jdk可能沒有這個(gè)方法

有一個(gè)getUnsafe()方法,但是很不幸,該方法是提供給jdk內(nèi)部使用的。我們直接調(diào)用該方法會(huì)拋異常的。

具體原理就是該類會(huì)判斷當(dāng)前調(diào)用這個(gè)方法的類是不是由Bootstrap類加載器加載的。

那么如何獲取這個(gè)Unsafe實(shí)例呢?

有兩種方法

  • 一、讓我們使用了Unsafe對(duì)象的類通過Bootstrap加載
  • 二、熟悉反射的同學(xué)就會(huì)心頭一冷笑,這還不簡(jiǎn)單嗎?是的,我們可以直接通過反射獲取

這里只講通過反射獲取的方式

獲取Unsafe對(duì)象

		Field theUnsafe = Unsafe.class.getDeclaredField("theUnsafe");
        theUnsafe.setAccessible(true);
        Unsafe unsafe = (Unsafe) theUnsafe.get(null);

java基礎(chǔ)好的同學(xué),這段代碼應(yīng)再熟悉不過了

不執(zhí)行構(gòu)造函數(shù)創(chuàng)建對(duì)象?

Unsafe類中有一個(gè) sun.misc.Unsafe#allocateInstance 方法, 接收一個(gè)Class<?> 類型對(duì)象,然后返回該類的一個(gè)對(duì)象

我們準(zhǔn)備一個(gè)測(cè)試類

class Test{
    private String name;
    public Test(){
        System.out.println("test construct");
    }

}

該類構(gòu)造方法私有,然后構(gòu)造方法中打印了一句話,也就是,只要你創(chuàng)建一個(gè)新的對(duì)象就會(huì)打印這句話。

        Field theUnsafe = Unsafe.class.getDeclaredField("theUnsafe");
        theUnsafe.setAccessible(true);
        Unsafe unsafe = (Unsafe) theUnsafe.get(null);
        Test test = (Test) unsafe.allocateInstance(Test.class);

測(cè)試代碼

上面這段代碼是沒有任何輸出的,也就是沒有執(zhí)行構(gòu)造方法,但是卻返回了一個(gè)對(duì)象

因此也聽有人說 壓根就沒有創(chuàng)建對(duì)象, 這我也不好說有沒有創(chuàng)建對(duì)象,因?yàn)閷?duì)于底層具體怎么實(shí)現(xiàn)的我也不造,但是我更傾向于是沒有執(zhí)行構(gòu)造方法創(chuàng)建對(duì)象這種說法吧。

總結(jié)以及注意事項(xiàng)

通過這篇文章我們知道原來java中也提供了直接操作內(nèi)存的類,而且該類還能不執(zhí)行構(gòu)造方法就返回一個(gè)對(duì)象,不過因此也有注意,Unsafe類是直接操作內(nèi)存的,所以他所分配的內(nèi)存jvm的垃圾收集器是無法釋放的。該類操作的內(nèi)存和C語言中一樣,要手動(dòng)釋放。

關(guān)于該類的更多使用方式可到網(wǎng)上找相關(guān)的資料

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Mybatis的if從句中的賦值烏龍

    Mybatis的if從句中的賦值烏龍

    本文主要介紹了Mybatis的if從句中的賦值烏龍,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-05-05
  • 詳細(xì)講解Java輸入語句的寫法

    詳細(xì)講解Java輸入語句的寫法

    作為初步進(jìn)入java開發(fā)學(xué)習(xí)的小白來說,學(xué)習(xí)java語言一開始的時(shí)候得一步步的學(xué)習(xí),比如說java輸入語句應(yīng)該這么去實(shí)現(xiàn)呢,這篇文章主要給大家介紹了關(guān)于Java輸入語句的相關(guān)資料,需要的朋友可以參考下
    2024-03-03
  • 將springboot項(xiàng)目生成可依賴的jar并引入到項(xiàng)目中的方法

    將springboot項(xiàng)目生成可依賴的jar并引入到項(xiàng)目中的方法

    SpringBoot項(xiàng)目默認(rèn)打包的是可運(yùn)行jar包,也可以打包成不可運(yùn)行的jar包,本文給大家介紹將springboot項(xiàng)目生成可依賴的jar并引入到項(xiàng)目中的方法,感興趣的朋友一起看看吧
    2023-11-11
  • Java?Socket實(shí)現(xiàn)聊天室功能

    Java?Socket實(shí)現(xiàn)聊天室功能

    這篇文章主要為大家詳細(xì)介紹了Java?Socket實(shí)現(xiàn)聊天室功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • SpringBoot如何讀取配置文件中的數(shù)據(jù)到map和list

    SpringBoot如何讀取配置文件中的數(shù)據(jù)到map和list

    這篇文章主要介紹了SpringBoot如何讀取配置文件中的數(shù)據(jù)到map和list,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • java實(shí)現(xiàn)Runnable接口適合資源的共享

    java實(shí)現(xiàn)Runnable接口適合資源的共享

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)Runnable接口適合資源的共享,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • 使用@Validated 和 BindingResult 遇到的坑及解決

    使用@Validated 和 BindingResult 遇到的坑及解決

    這篇文章主要介紹了使用@Validated 和 BindingResult 遇到的坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • 使用Spring?Boot?2.x構(gòu)建Web服務(wù)的詳細(xì)代碼

    使用Spring?Boot?2.x構(gòu)建Web服務(wù)的詳細(xì)代碼

    這篇文章主要介紹了使用Spring?Boot?2.x構(gòu)建Web服務(wù)的詳細(xì)代碼,主要基于JWT的身份認(rèn)證,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • Java實(shí)現(xiàn)一個(gè)簡(jiǎn)單的定時(shí)器代碼解析

    Java實(shí)現(xiàn)一個(gè)簡(jiǎn)單的定時(shí)器代碼解析

    這篇文章主要介紹了Java實(shí)現(xiàn)一個(gè)簡(jiǎn)單的定時(shí)器代碼解析,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • Java安全后端返回文件流方式

    Java安全后端返回文件流方式

    這篇文章主要介紹了Java安全后端返回文件流方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07

最新評(píng)論

成安县| 洪湖市| 济阳县| 大庆市| 西乌珠穆沁旗| 灵宝市| 邵阳县| 田东县| 仪征市| 隆安县| 射阳县| 清远市| 海城市| 额尔古纳市| 绥宁县| 重庆市| 舞钢市| 莎车县| 平邑县| 宁强县| 额济纳旗| 广东省| 健康| 梁山县| 太康县| 临安市| 松溪县| 浏阳市| 黄大仙区| 崇阳县| 蕲春县| 农安县| 昔阳县| 兰西县| 白城市| 得荣县| 平阳县| 探索| 白沙| 涞水县| 镇康县|