ClassLoader 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
類別載入器是負責載入類別的物件。
[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
類別是抽象類。 假設類別的二進位名稱,類別載入器應該嘗試尋找或產生構成類別定義的數據。 典型的策略是將名稱轉換成檔名,然後從檔系統讀取該名稱的「類別檔案」。
每個 Class <tt>Class</tt>
物件都包含Class#getClassLoader() reference
ClassLoader
定義它的 。
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 = new NetworkClassLoader(host, port);
Object main = loader.loadClass("Main", true).newInstance();
. . .
</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
. . .
}
}
</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.ClassLoader
Java 檔。
此頁面的部分是根據 原始碼專案所建立和共用的工作進行修改,並根據 中所述的詞彙使用。
建構函式
ClassLoader() |
使用 |
ClassLoader(ClassLoader) |
使用指定的父類別載入器來委派,建立新的類別載入器。 |
ClassLoader(IntPtr, JniHandleOwnership) |
建立 JNI 物件的 Managed 表示法時所使用的建構函式;由運行時間呼叫。 |
屬性
Class |
傳回這個 |
Handle |
基礎Android實例的句柄。 (繼承來源 Object) |
JniIdentityHashCode |
類別載入器是負責載入類別的物件。 (繼承來源 Object) |
JniPeerMembers |
類別載入器是負責載入類別的物件。 |
Parent |
傳回委派的父類別載入器。 |
PeerReference |
類別載入器是負責載入類別的物件。 (繼承來源 Object) |
SystemClassLoader |
傳回系統類別載入器以進行委派。 |
ThresholdClass |
此 API 支援 Mono for Android 基礎結構,並不適合直接從您的程式代碼使用。 |
ThresholdType |
此 API 支援 Mono for Android 基礎結構,並不適合直接從您的程式代碼使用。 |
方法
ClearAssertionStatus() |
將這個類別載入器的預設判斷提示狀態設定設為 |
Clone() |
建立並傳回這個 對象的複本。 (繼承來源 Object) |
DefineClass(Byte[], Int32, Int32) |
已淘汰.
將位元組數位轉換成 類別 |
DefineClass(String, Byte[], Int32, Int32) |
將位元組數位轉換成 類別 |
DefineClass(String, Byte[], Int32, Int32, ProtectionDomain) |
使用選擇性 |
DefineClass(String, ByteBuffer, ProtectionDomain) |
使用選擇性 |
DefinePackage(String, String, String, String, String, String, String, URL) |
依名稱在此 |
Dispose() |
類別載入器是負責載入類別的物件。 (繼承來源 Object) |
Dispose(Boolean) |
類別載入器是負責載入類別的物件。 (繼承來源 Object) |
Equals(Object) |
指出其他物件是否「等於」這個物件。 (繼承來源 Object) |
FindClass(String) |
尋找具有指定二進位名稱的類別。 |
FindLibrary(String) |
傳回原生連結庫的絕對路徑名稱。 |
FindLoadedClass(String) |
如果 Java 虛擬機已將此載入器記錄為具有該二進位名稱之類別的起始載入器,則會傳回具有指定二進位名稱的類別。 |
FindResource(String) |
尋找具有指定名稱的資源。 |
FindResources(String) |
傳回 物件的列舉 |
FindSystemClass(String) |
尋找具有指定二進位名稱的類別,並視需要載入它。 |
GetHashCode() |
傳回此物件的雜湊碼值。 (繼承來源 Object) |
GetPackage(String) |
|
GetPackages() |
傳回這個類別載入器及其上階所定義的所有 |
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) |
類別載入器是負責載入類別的物件。 |