1. 程式人生 > >Java:Class類的靜態方法forName()

Java:Class類的靜態方法forName()

在說明Class類的靜態方法forName()之前,先清楚有關Class類的幾個概念:

1、Class類封裝了類或介面的執行時狀態

Java程式在執行時,Java執行時系統一直對所有的物件進行所謂的執行時型別標識,這些標示紀錄了每個物件所屬的類。虛擬機器通常使用執行時型別資訊選正確方法去執行,用來儲存這些型別資訊的類是Class類。

2、Class型別的物件是載入類時自動建立的

Class 沒有公共構造方法。Class 物件是在載入類時由Java 虛擬機器以及通過呼叫類載入器中的 defineClass 方法自動構造的,因此不能顯式地宣告一個Class物件。 

3、虛擬機器為每種型別管理一個獨一無二的Class物件

每個類(型)都有一個Class物件。執行程式時,Java虛擬機器(JVM)首先檢查所要載入的類對應的Class物件是否已經載入。如果沒有載入,JVM就會根據類名查詢.class檔案,並將其Class物件載入。

基本的 Java 型別(boolean、byte、char、short、int、long、float 和 double)和關鍵字 void 也都對應一個 Class 物件。  每個陣列屬於被對映為 Class 物件的一個類,所有具有相同元素型別和維數的陣列都共享該 Class 物件。一般某個類的Class物件被載入記憶體,它就用來建立這個類的所有物件。

那麼,我們如何獲得Class 的物件呢

通常是通過Object類(所有類的超類)定義的getClass()方法來獲取Class物件;

再者就是匹配一個Java型別的類物件,比如:如果T是一個Java型別,那麼T.class就代表了匹配的類物件

第三種方法就是使用Class類的靜態方法,語法格式是:

static Class<?> forName(String name)  throws ClassNotFoundException  //返回給定全名的Class物件

或者:“

static Class<?> forName(String name, boolean how, ClassLoader ldr)

//返回給定全名的Class物件。物件使用由ldr指定的載入器載入。如果how為true,就初始化物件;否則不進行初始化

Class.forName(className)實際上是呼叫Class.forName(className,true, this.getClass().getClassLoader())。第二個引數,是指Class被loading後是不是必須被初始化。可以看出,使用Class.forName(className)載入類時則已初始化。所以 Class.forName(className) 可以簡單的理解為: 獲得字串引數中指定的類,並初始化該類 。

Class類的靜態方法forName()的應用

1、載入JDBC驅動

class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

2、使用AIDL與電話管理Servic進行通訊

Method method =Class. forName ( "android.os.ServiceManager" ).getMethod( "getService" ,String. class );



相關推薦

Java:Class靜態方法forName()

在說明Class類的靜態方法forName()之前,先清楚有關Class類的幾個概念: 1、Class類封裝了類或介面的執行時狀態 Java程式在執行時,Java執行時系統一直對所有的物件進行所謂的執行時型別標識,這些標示紀錄了每個物件所屬的類。虛擬機器通常使用執行時型別資

java基礎 靜態 static 問在多態中,子靜態方法覆蓋父靜態方法時,父引用調用的是哪個方法

xtend java pos main 靜態方法 show extends ava pri 多態 package com.swift.jiekou; public class Jicheng_Tuotai_jingtai_diaoyong { publ

關於java中父靜態方法能否被之類重寫的問題

1. 先說結論:   不能被重寫 2. 為什麼??   ②. 所引用該方法的物件指向的都是記憶體中同一塊記憶體的資料, 已經寫死了呀, 那你還怎麼重寫呢 3. 靜態方法可以直接用類名呼叫這麼方便,為什麼不都設定為靜態屬性和方法?   ①.靜態方法從屬於類, 可以通過類名直接呼叫, 在編譯

java靜態方法測試

靜態方法是在new之前就已經載入到記憶體地址中了,再次new物件時候這些靜態屬性或者靜態方法不會再分配新的記憶體地址了,這些靜態屬性或者靜態方法在多個物件中是共用的。 public class Com

java Class-載入的三種方法 以及的初始化的六種方式 及終止執行的方式

1在命令列啟動虛擬機器jvm進行載入,2用class.forname()方法進行動態載入;3用ClassLoader.loadClass()進行動態載入;區別:用二方法載入時,還會對類進行解釋,執行其中的static語句塊;          用三方法時候,static語句塊

轉載--創建java常量方法

ret get ntc www 引用 lsi public field log 1 /** 2 * Method One 3 */ 4 interface ConstantInterface { 5 String SUNDAY

使用Java定義方法

wav pac puts 分數 bit port 定義類 system.in asc 一、訓練點: 類的方法定義和調用 二、需求: 輸入三門課的成績、計算平均分、計算總成績 1) 不使用類和方法 package cn.jbit.qq; import java.uti

Java File常用方法及實例

獲取 而且 exist exc file類 註釋 sys 遞歸遍歷 cep 創建:createNewFile()在指定位置創建一個空文件,成功就返回true,如果已存在就不創建,然後返回false。mkdir() 在指定位置創建一個單級文件夾。mkdirs() 在指定位

Java抽象/抽象方法

abs 技術分享 不用 加油 alt ext void mage round java抽象類的特點: *抽象類無法被實例化 *子類繼承抽象類然後實例化子類 *子類繼承了抽象類剋必須實現抽象類的中的抽象方法 *抽象類的定義 abstract class *** *抽象方法的定

Java 集合常用方法

cti unknown nag ace 方法區 中比 thread arr 使用 Collection中的contains()方法和remove()方法。 boolean contains(Object o);該方法是用來判斷集合中是否包含某個元素,若包含,返回true,不

Java Map常用方法

apple jdb 映射關系 所有 user while 字符串 關系 lan 關於Map集合中常用的方法: void clear(); 清空Map boolean containsKey(Object key); 判斷Map中是否包含這樣的key boolean cont

C#靜態 靜態方法與非靜態方法比較

定義 都是 無法 不能 tro 就是 類的本質 bsp true 靜態類: 在類(class)上加入static修飾, 表示該類無法被實例化,並且該類中,無法實例化變量或函數。 那麽如果要在此靜態類中添加函數、變量、屬性,則必須都是靜態的。 靜態類的主要特性: 1:僅包含靜

Java-Parameter常用方法詳解

這次主要整理下Java中Parameter類的常用方法 一、Parameter類的定義 Parameter類位於 java.lang.reflect 包中,主要用於在程式執行狀態中,動態地獲取方法引數資訊 在jdk8之前,編譯器會忽略我們編寫程式碼時設定的引數

Java Class檔案結構

平臺無關性 Java是與平臺無關的語言,這得益於Java原始碼編譯後生成的儲存位元組碼的檔案,即Class檔案,以及Java虛擬機器的實現。不僅使用Java編譯器可以把Java程式碼編譯成儲存位元組碼的Class檔案,使用JRuby等其他語言的編譯器也可以把程式程式碼編譯成Class檔案,虛擬機

Java | 基礎歸納 | 靜態方法與例項方法的區別

靜態方法和例項方法的區別主要體現在兩個方面: 在外部呼叫靜態方法時,可以使用"類名.方法名"的方式,也可以使用"物件名.方法名"的方式。而例項方法只有後面這種方式。也就是說,呼叫靜態方法可以無需建立物件。 靜態方法在訪問本類的成員時,只允許訪問靜態成員(即靜態成員變數和靜態方法),而不允許訪問例項成員變數

Java | 基礎歸納 | 靜態方法與實例方法的區別

的區別 方法 方法名 則無 blog arch 靜態成員 java 類名 靜態方法和實例方法的區別主要體現在兩個方面: 在外部調用靜態方法時,可以使用"類名.方法名"的方式,也可以使用"對象名.方法名"的方式。而實例方法只有後面這種方式。也就是說,調用靜態方法可以無需創建對

Java String equals()方法的實現

1、貼原始碼,暫且自行閱讀 public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject insta

Java——Integer方法與實現,String和int的相互轉換

基本型別和包裝類的對應          以下的封裝類可以用於基本資料型別與字串的轉換                    byte             Byte          short            Short          int         

Java System概述/方法

System: 1. 不需要建立物件,都是靜態的方法 2.out 對應的標準輸出流,此流已開啟,並準備好接受輸出資料。 通常,此流對應於顯示輸出或由主機環境或使用者指定的另一個輸出目標。 3. in 標準”輸入流。 該流已經開啟,準備提供輸入資料。 通

java構造方法引數的有無對子構造的影響

情況1:父類有無參構造方法時 子類可以無參構造方法也可以沒有無參構造方法,若無無參呼叫方法則需要顯示的呼叫super(引數); 情況2:父類中無無參構造方法時 子類一般不允許有無參構造方法,因為無參構造方法,構造時沒有引數傳入,而父類中沒有無參構造方法,子類中只