欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
關(guān)于ClassLoader
了解ClassLoader
1,   什么是 ClassLoader?
   Java 程序并不是一個(gè)可執行文件,是需要的時(shí)候,才把裝載到 JVM中。ClassLoader 做的工作就是 JVM 中將類(lèi)裝入內存。而且,Java ClassLoader 就是用 Java 語(yǔ)言編寫(xiě)的。這意味著(zhù)您可以創(chuàng )建自己的 ClassLoader
   ClassLoader 的基本目標是對類(lèi)的請求提供服務(wù)。當 JVM 需要使用類(lèi)時(shí),它根據名稱(chēng)向 ClassLoader 請求這個(gè)類(lèi),然后ClassLoader 試圖返回一個(gè)表示這個(gè)類(lèi)的 Class 對象。 通過(guò)覆蓋對應于這個(gè)過(guò)程不同階段的方法,可以創(chuàng )建定制的ClassLoader。
2, 一些重要的方法
A)  方法 loadClass
        ClassLoader.loadClass() 是 ClassLoader 的入口點(diǎn)。該方法的定義如下:
        Class loadClass( String name, boolean resolve );
         name  JVM 需要的類(lèi)的名稱(chēng),如 Foo 或 java.lang.Object。
         resolve 參數告訴方法是否需要解析類(lèi)。在準備執行類(lèi)之前,應考慮類(lèi)解析。并不總是需要解析。如果 JVM 只需要知道該類(lèi)是否存在或找出該類(lèi)的超類(lèi),那么就不需要解析。
    
    B)  方法 defineClass
      defineClass 方法是 ClassLoader 的主要訣竅。該方法接受由原始字節組成的數組并把它轉換成 Class對象。原始數組包含如從文件系統或網(wǎng)絡(luò )裝入的數據。defineClass 管理 JVM 的許多復雜、神秘和倚賴(lài)于實(shí)現的方面 --它把字節碼分析成運行時(shí)數據結構、校驗有效性等等。不必擔心,您無(wú)需親自編寫(xiě)它。事實(shí)上,即使您想要這么做也不能覆蓋它,因為它已被標記成final的。

    C)  方法 findSystemClass
       findSystemClass方法從本地文件系統裝入文件。它在本地文件系統中尋找類(lèi)文件,如果存在,就使用 defineClass 將原始字節轉換成 Class對象,以將該文件轉換成類(lèi)。當運行 Java 應用程序時(shí),這是 JVM 正常裝入類(lèi)的缺省機制。(Java 2 中 ClassLoader的變動(dòng)提供了關(guān)于 Java 版本 1.2 這個(gè)過(guò)程變動(dòng)的詳細信息。) 對于定制的 ClassLoader,只有在嘗試其它方法裝入類(lèi)之后,再使用findSystemClass。原因很簡(jiǎn)單:ClassLoader 是負責執行裝入類(lèi)的特殊步驟,不是負責所有類(lèi)。例如,即使ClassLoader 從遠程的 Web 站點(diǎn)裝入了某些類(lèi),仍然需要在本地機器上裝入大量的基本 Java 庫。而這些類(lèi)不是我們所關(guān)心的,所以要JVM 以缺省方式裝入它們:從本地文件系統。這就是 findSystemClass 的用途。

     D) 方法 resolveClass
   正如前面所提到的,可以不完全地(不帶解析)裝入類(lèi),也可以完全地(帶解析)裝入類(lèi)。當編寫(xiě)我們自己的 loadClass 時(shí),可以調用 resolveClass,這取決于 loadClass 的 resolve 參數的值。


   E) 方法 findLoadedClass
      findLoadedClass 充當一個(gè)緩存:當請求 loadClass 裝入類(lèi)時(shí),它調用該方法來(lái)查看 ClassLoader 是否已裝入這個(gè)類(lèi),這樣可以避免重新裝入已存在類(lèi)所造成的麻煩。應首先調用該方法。

3, 怎么組裝這些方法
  1) 調用 findLoadedClass 來(lái)查看是否存在已裝入的類(lèi)。
  2) 如果沒(méi)有,那么采用那種特殊的神奇方式來(lái)獲取原始字節。
  3) 如果已有原始字節,調用 defineClass 將它們轉換成 Class 對象。
  4) 如果沒(méi)有原始字節,然后調用 findSystemClass 查看是否從本地文件系統獲取類(lèi)。
  5) 如果 resolve 參數是 true,那么調用 resolveClass 解析 Class 對象。
  6) 如果還沒(méi)有類(lèi),返回 ClassNotFoundException。

4,Java 2 中 ClassLoader 的變動(dòng)
1)loadClass 的缺省實(shí)現
  定制編寫(xiě)的 loadClass 方法一般嘗試幾種方式來(lái)裝入所請求的類(lèi),如果您編寫(xiě)許多類(lèi),會(huì )發(fā)現一次次地在相同的、很復雜的方法上編寫(xiě)變量。 在Java 1.2 中 loadClass 的實(shí)現嵌入了大多數查找類(lèi)的一般方法,并使您通過(guò)覆蓋 findClass 方法來(lái)定制它,在適當的時(shí)候findClass 會(huì )調用 loadClass。 這種方式的好處是您可能不一定要覆蓋 loadClass;只要覆蓋 findClass就行了,這減少了工作量。

2)新方法:findClass
     loadClass 的缺省實(shí)現調用這個(gè)新方法。findClass 的用途包含您的 ClassLoader 的所有特殊代碼,而無(wú)需要復制其它代碼(例如,當專(zhuān)門(mén)的方法失敗時(shí),調用系統 ClassLoader)。

3) 新方法:getSystemClassLoader
     如果覆蓋 findClass 或 loadClass,getSystemClassLoader 使您能以實(shí)際 ClassLoader 對象來(lái)訪(fǎng)問(wèn)系統 ClassLoader(而不是固定的從 findSystemClass 調用它)。
 
4) 新方法:getParent 
    為了將類(lèi)請求委托給父代 ClassLoader,這個(gè)新方法允許 ClassLoader 獲取它的父代 ClassLoader。當使用特殊方法,定制的 ClassLoader 不能找到類(lèi)時(shí),可以使用這種方法。
父代 ClassLoader 被定義成創(chuàng )建該 ClassLoader 所包含代碼的對象的 ClassLoader。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
類(lèi)加載器ClassLoader的詳解
JVM真香系列:輕松理解class文件到虛擬機(下)
初探Java類(lèi)加載機制的奧秘 轉載天極網(wǎng)blog
通過(guò)實(shí)例Java?ClassLoader原理
了解Java ClassLoader
InfoQ: Java深度歷險(二)——Java類(lèi)的加載、鏈接和初始化
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久