Share via


ClassLoader 類別

定義

類別載入器是負責載入類別的物件。

[Android.Runtime.Register("java/lang/ClassLoader", DoNotGenerateAcw=true)]
public abstract class ClassLoader : Java.Lang.Object
[<Android.Runtime.Register("java/lang/ClassLoader", DoNotGenerateAcw=true)>]
type ClassLoader = class
    inherit Object
繼承
ClassLoader
衍生
屬性

備註

類別載入器是負責載入類別的物件。 ClassLoader類別是抽象類。 假設類別的二進位名稱,類別載入器應該嘗試尋找或產生構成類別定義的數據。 典型的策略是將名稱轉換成檔名,然後從檔系統讀取該名稱的「類別檔案」。

每個 Class <tt>Class</tt> 物件都包含Class#getClassLoader() referenceClassLoader定義它的 。

Class 陣列類別的物件不是由類別載入器所建立,而是依 Java 執行時間的需求自動建立。 陣列類別的類別載入器,如所傳 Class#getClassLoader() 回,與類別載入器的項目類型相同;如果項目類型為基本類型,則陣列類別沒有類別載入器。

應用程式會實作 的 ClassLoader 子類別,以擴充 Java 虛擬機動態載入類別的方式。

類別載入器通常可由安全性管理員用來指出安全性網域。

類別 ClassLoader 會使用委派模型來搜尋類別和資源。 的每個實例 ClassLoader 都有相關聯的父類別載入器。 當要求尋找類別或資源時, ClassLoader 實例會在嘗試尋找類別或資源本身之前,將類別或資源的搜尋委派給其父類別載入器。 虛擬機的內建類別載入器稱為「啟動程式類別載入器」,本身沒有父代,但可作為實例的 ClassLoader 父代。

支援並行載入類別的類別載入器稱為 <em parallel support</em> 類別載入器,而且需要叫#registerAsParallelCapable <tt>ClassLoader.registerAsParallelCapable</tt>用 方法在類別初始化>時自行註冊。 請注意,類別 ClassLoader 預設會註冊為支援平行。 不過,如果子類別具有平行功能,則仍需要自行註冊。 <br> 在委派模型並非嚴格階層式的環境中,類別載入器必須具備平行功能,否則類別載入可能會導致死結,因為載入器鎖定會在類別載入程式期間保留, (請參閱 #loadClass <tt>loadClass</tt> 方法) 。

一般而言,Java 虛擬機會以平臺相依的方式從本機文件系統載入類別。 例如,在 UNIX 系統上,虛擬機會從環境變數所 CLASSPATH 定義的目錄載入類別。

不過,某些類別可能不是來自檔案;它們可能來自其他來源,例如網路,或可由應用程式建構。 方法 #defineClass(String, byte[], int, int) <tt>defineClass</tt> 會將位元組陣列轉換成 類別 Class的實例。 您可以使用 來建立 Class#newInstance <tt>Class.newInstance</tt>這個新定義的類別實例。

類別載入器所建立之物件的方法和建構函式可能會參考其他類別。 為了判斷所參考類別 () ,Java 虛擬機會 #loadClass <tt>loadClass</tt> 叫用原本建立類別之類別載入器的方法。

例如,應用程式可以建立網路類別載入器,以從伺服器下載類別檔案。 範例程式代碼看起來可能如下:

<blockquote>

ClassLoader loader&nbsp;= new NetworkClassLoader(host,&nbsp;port);
              Object main&nbsp;= loader.loadClass("Main", true).newInstance();
                  &nbsp;.&nbsp;.&nbsp;.

</blockquote>

網路類別載入器子類別必須定義方法和#findClass <tt>findClass</tt>loadClassData從網路載入類別。 下載組成 類別的位元組之後,它應該使用 方法來 #defineClass <tt>defineClass</tt> 建立類別實例。 範例實作為:

<blockquote>

class NetworkClassLoader extends ClassLoader {
                    String host;
                    int port;

                    public Class findClass(String name) {
                        byte[] b = loadClassData(name);
                        return defineClass(name, b, 0, b.length);
                    }

                    private byte[] loadClassData(String name) {
                        // load the class data from the connection
                        &nbsp;.&nbsp;.&nbsp;.
                    }
                }

</blockquote>

<h3> “name”>Binary names</h3>

以 方法參數形式提供String的任何類別名稱,都必須是參考>Java&交易所<定義的二進位ClassLoader名稱;語言規格</引文>。

有效類別名稱的範例包括: <blockquote>

"java.lang.String"
              "javax.swing.JSpinner$DefaultEditor"
              "java.security.KeyStore$Builder$FileBuilder$1"
              "java.net.URLClassLoader$3$1"

</blockquote>

已在1.0中新增。

java.lang.ClassLoaderJava 檔。

此頁面的部分是根據 原始碼專案所建立和共用的工作進行修改,並根據 中所述的詞彙使用。

建構函式

ClassLoader()

使用 ClassLoader 方法 #getSystemClassLoader() <tt>getSystemClassLoader()</tt> 傳回做為父類別載入器的 ,建立新的類別載入器。

ClassLoader(ClassLoader)

使用指定的父類別載入器來委派,建立新的類別載入器。

ClassLoader(IntPtr, JniHandleOwnership)

建立 JNI 物件的 Managed 表示法時所使用的建構函式;由運行時間呼叫。

屬性

Class

傳回這個 Object的運行時間類別。

(繼承來源 Object)
Handle

基礎Android實例的句柄。

(繼承來源 Object)
JniIdentityHashCode

類別載入器是負責載入類別的物件。

(繼承來源 Object)
JniPeerMembers

類別載入器是負責載入類別的物件。

Parent

傳回委派的父類別載入器。

PeerReference

類別載入器是負責載入類別的物件。

(繼承來源 Object)
SystemClassLoader

傳回系統類別載入器以進行委派。

ThresholdClass

此 API 支援 Mono for Android 基礎結構,並不適合直接從您的程式代碼使用。

ThresholdType

此 API 支援 Mono for Android 基礎結構,並不適合直接從您的程式代碼使用。

方法

ClearAssertionStatus()

將這個類別載入器的預設判斷提示狀態設定設為 false ,並捨棄與類別載入器相關聯的任何封裝預設值或類別判斷提示狀態設定。

Clone()

建立並傳回這個 對象的複本。

(繼承來源 Object)
DefineClass(Byte[], Int32, Int32)
已淘汰.

將位元組數位轉換成 類別 Class的實例。

DefineClass(String, Byte[], Int32, Int32)

將位元組數位轉換成 類別 Class的實例。

DefineClass(String, Byte[], Int32, Int32, ProtectionDomain)

使用選擇性 ProtectionDomain的 ,將位元組數位轉換成 類別Class的實例。

DefineClass(String, ByteBuffer, ProtectionDomain)

使用選擇性 ProtectionDomainjava.nio.ByteBuffer <tt>ByteBuffer</tt> ,將轉換成 類別Class的實例。

DefinePackage(String, String, String, String, String, String, String, URL)

依名稱在此 ClassLoader中定義封裝。

Dispose()

類別載入器是負責載入類別的物件。

(繼承來源 Object)
Dispose(Boolean)

類別載入器是負責載入類別的物件。

(繼承來源 Object)
Equals(Object)

指出其他物件是否「等於」這個物件。

(繼承來源 Object)
FindClass(String)

尋找具有指定二進位名稱的類別。

FindLibrary(String)

傳回原生連結庫的絕對路徑名稱。

FindLoadedClass(String)

如果 Java 虛擬機已將此載入器記錄為具有該二進位名稱之類別的起始載入器,則會傳回具有指定二進位名稱的類別。

FindResource(String)

尋找具有指定名稱的資源。

FindResources(String)

傳回 物件的列舉 java.net.URL <tt>URL</tt> ,代表具有指定名稱的所有資源。

FindSystemClass(String)

尋找具有指定二進位名稱的類別,並視需要載入它。

GetHashCode()

傳回此物件的雜湊碼值。

(繼承來源 Object)
GetPackage(String)

Package傳回這個類別載入器或其任何上階所定義的 。

GetPackages()

傳回這個類別載入器及其上階所定義的所有 Packages

GetResource(String)

尋找具有指定名稱的資源。

GetResourceAsStream(String)

傳回用於讀取指定資源的輸入數據流。

GetResources(String)

尋找具有指定名稱的所有資源。

GetSystemResource(String)

從用來載入類別的搜尋路徑中尋找指定名稱的資源。

GetSystemResourceAsStream(String)

開啟以供讀取,這是用來載入類別之搜尋路徑中指定名稱的資源。

GetSystemResources(String)

從用來載入類別的搜尋路徑中尋找指定名稱的所有資源。

JavaFinalize()

當垃圾收集判斷對象沒有其他參考時,由物件上的垃圾收集行程呼叫。

(繼承來源 Object)
LoadClass(String)

載入具有指定二進位名稱的類別。

LoadClass(String, Boolean)

載入具有指定二進位名稱的類別。

LoadClassAsync(String)

類別載入器是負責載入類別的物件。

LoadClassAsync(String, Boolean)

類別載入器是負責載入類別的物件。

Notify()

喚醒正在等候此物件的監視器的單一線程。

(繼承來源 Object)
NotifyAll()

喚醒正在等候此物件監視器的所有線程。

(繼承來源 Object)
RegisterAsParallelCapable()

將呼叫端註冊為支援平行。

ResolveClass(Class)

連結指定的類別。

SetClassAssertionStatus(String, Boolean)

設定此類別載入器中具名最上層類別的預期判斷提示狀態,以及該處所包含的任何巢狀類別。

SetDefaultAssertionStatus(Boolean)

設定這個類別載入器的預設判斷提示狀態。

SetHandle(IntPtr, JniHandleOwnership)

設定 Handle 屬性。

(繼承來源 Object)
SetPackageAssertionStatus(String, Boolean)

設定具名封裝的套件默認判斷提示狀態。

SetSigners(Class, Object[])

設定類別的簽署者。

ToArray<T>()

類別載入器是負責載入類別的物件。

(繼承來源 Object)
ToString()

傳回物件的字串表示。

(繼承來源 Object)
UnregisterFromRuntime()

類別載入器是負責載入類別的物件。

(繼承來源 Object)
Wait()

讓目前的線程等到喚醒為止,通常是藉由 <em>notified</em> 或 <em>interrupted</em> 來喚醒。

(繼承來源 Object)
Wait(Int64)

讓目前的線程等到喚醒為止,通常是<透過em>notified</em或em>interrupted</em>>,或<直到經過一定數量的實時為止。

(繼承來源 Object)
Wait(Int64, Int32)

讓目前的線程等到喚醒為止,通常是<透過em>notified</em或em>interrupted</em>>,或<直到經過一定數量的實時為止。

(繼承來源 Object)

明確介面實作

IJavaPeerable.Disposed()

類別載入器是負責載入類別的物件。

(繼承來源 Object)
IJavaPeerable.DisposeUnlessReferenced()

類別載入器是負責載入類別的物件。

(繼承來源 Object)
IJavaPeerable.Finalized()

類別載入器是負責載入類別的物件。

(繼承來源 Object)
IJavaPeerable.JniManagedPeerState

類別載入器是負責載入類別的物件。

(繼承來源 Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

類別載入器是負責載入類別的物件。

(繼承來源 Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

類別載入器是負責載入類別的物件。

(繼承來源 Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

類別載入器是負責載入類別的物件。

(繼承來源 Object)

擴充方法

JavaCast<TResult>(IJavaObject)

執行 Android 執行時間檢查的類型轉換。

JavaCast<TResult>(IJavaObject)

類別載入器是負責載入類別的物件。

GetJniTypeName(IJavaPeerable)

類別載入器是負責載入類別的物件。

適用於