❶ java鍔犺澆鏁版嵁搴撹繛鎺ラ┍鍔錛屼負浠涔堣佺敤Class.forName()鏂規硶
鐩鐨勬槸涓轟簡瀹炰緥鍖栧硅薄銆
Class.forName("")榪斿洖鐨勬槸綾
Class.forName("").newInstance()榪斿洖鐨勬槸object
鍒氭墠鎻愬埌錛孋lass.forName("");鐨勪綔鐢ㄦ槸瑕佹眰JVM鏌ユ壘騫跺姞杞芥寚瀹氱殑綾伙紝濡傛灉鍦ㄧ被涓鏈夐潤鎬佸垵濮嬪寲鍣ㄧ殑璇濓紝JVM蹇呯劧浼氭墽琛岃ョ被鐨勯潤鎬佷唬鐮 孌點傝屽湪JDBC瑙勮寖涓鏄庣『瑕佹眰榪欎釜Driver綾誨繀欏誨悜DriverManager娉ㄥ唽鑷宸憋紝鍗充換浣曚竴涓狫DBC Driver鐨 Driver綾葷殑浠g爜閮藉繀欏葷被浼煎備笅錛
public class MyJDBCDriver implements Driver {static {DriverManager.registerDriver(new MyJDBCDriver());}}鏃㈢劧鍦ㄩ潤鎬佸垵濮嬪寲鍣ㄧ殑涓宸茬粡榪涜屼簡娉ㄥ唽錛屾墍浠ユ垜浠鍦ㄤ嬌鐢↗DBC鏃跺彧闇瑕丆lass.forName(XXX.XXX);灝卞彲浠ヤ簡銆
we just want to load the driver to jvm only, but not need to user the instance of driver, so call Class.forName(xxx.xx.xx) is enough, if you call Class.forName(xxx.xx.xx).newInstance(), the result will same as calling Class.forName(xxx.xx.xx), because Class.forName(xxx.xx.xx).newInstance() will load driver first, and then create instance, but the instacne you will never use in usual, so you need not to create it.
鎬葷粨錛歫dbc鏁版嵁搴撻┍鍔ㄧ▼搴忔渶緇堢殑鐩鐨勶紝鏄涓轟簡紼嬪簭鍛樿兘鎷垮埌鏁版嵁搴撹繛鎺ワ紝鑰岃繘琛宩dbc瑙勮寖鐨勬暟鎹搴撴搷浣溿傛嬁鍒拌繛鎺ョ殑榪囩▼鏄涓嶉渶瑕佷綘鑷宸辨潵瀹炰緥鍖栭┍鍔ㄧ▼搴忕殑錛岃屾槸閫氳繃 DriverManger.getConnection(string str); 銆傚洜姝や竴鑸鎯呭喌涓嬶紝瀵逛簬紼嬪簭鍛樻潵璇達紝闄ら潪鐗瑰埆闇奼傦紝鏄涓嶄細鑷宸卞幓瀹炰緥鍖栦竴涓鏁版嵁搴撻┍鍔ㄤ嬌鐢ㄩ噷闈㈢殑鏂規硶鐨勩
❷ 請問java下Class.forName的作用是什麼,為什麼要使用它
Class.forName(xxx.xx.xx) 返回的是一個類
Class.forName(xxx.xx.xx);的作用是要求JVM查找並載入指定的類,也就是說JVM會執行該類的靜態代碼段
❸ java下Class.forName的作用是什麼,為什麼要使用它
首先你要明白在java裡面任何class都要裝載在虛擬機上才能運行。這句話就是裝載類用的(和new不一樣,要分清楚)。 Aa=(A)Class.forName("pacage.A").newInstance();這和你Aa=newA(); 是一樣的效果。 關於補充的問題 答案是肯定的,jvm會執行靜態代碼段,你要記住一個概念,靜態代碼是和class綁定的,class裝載成功就表示執行了你的靜態代碼了。而且以後不會再走這段靜態代碼了。 Class.forName(xxx.xx.xx)返回的是一個類 Class.forName(xxx.xx.xx);的作用是要求JVM查找並載入指定的類,也就是說JVM會執行該類的靜態代碼段 動態載入和創建Class對象,比如想根據用戶輸入的字元串來創建對象 Stringstr=用戶輸入的字元串 Classt=Class.forName(str); t.newInstance(); classc=Class.forName(Example); factory=(ExampleInterface)c.newInstance(); 其中ExampleInterface是Example的介面,可以寫成如下形式: StringclassName="Example"; classc=Class.forName(className); factory=(ExampleInterface)c.newInstance(); 進一步可以寫成如下形式: StringclassName=readfromXMlConfig;//從xml配置文件中獲得字元串 classc=Class.forName(className); factory=(ExampleInterface)c.newInstance(); 從JVM的角度看,我們使用關鍵字new創建一個類的時候,這個類可以沒有被載入。但是使用newInstance()方法的時候,就必須保證:1、這個類已經載入;2、這個類已經連接了。而完成上面兩個步驟的正是Class的靜態方法forName()所完成的,這個靜態方法調用了啟動類載入器,即載入javaAPI的那個載入器。 現在可以看出,newInstance()實際上是把new這個方式分解為兩步,即首先調用Class載入方法載入某個類,然後實例化。這樣分步的好處是顯而易見的。我們可以在調用class的靜態載入方法forName時獲得更好的靈活性,提供給了一種降耦的手段。 最後用最簡單的描述來區分new關鍵字和newInstance()方法的區別: newInstance:弱類型。低效率。只能調用無參構造。 new:強類型。相對高效。
❹ java中 Class.forName("XXXX").....;與XXXX.class....有什麼區別
Class.forName("XXXX");的作用是要求JVM查找並載入指定的類,如果在類中有靜態初始化的話,JVM必然會執行該類的靜態代碼段,這時是不確定該類是否已經在JVM中載入。而XXXX.class是在JVM中載入已經載入過的類。
❺ JAVA反射中通過Class.forname()如何帶參數的方法怎麼賦值和調用呀
要調用帶參數的方法方法舉個例子:package com;
import java.lang.reflect.Method;
public class InvokeMethod {
public static void main(String args[]){
try
{
//動態載入Student類
Class student = Class.forName("com.Student");
//獲取Student類名稱為printInfo的方法
Method method1 = student.getMethod("printInfo");
//調用printInfo方法
method1.invoke(student.newInstance());
//獲取Student類名稱為printInfo的方法,String.class是方法的參數類型
Method method2 = student.getMethod("printAddress",String.class);
//調用printAddress方法,其中HK是為方法傳遞一個參數值
method2.invoke(student.newInstance(),"hello關知紅");
}catch(Exception e)
{
e.printStackTrace();
}
}
}
❻ JAVA反射中通過Class.forname()如何帶參數的方法怎麼賦值和調用呀
用Class.forName方法動態載入構造方法帶參數的類。
❼ JAVA 獲取class對象 類名.class Class.forName()兩種方法什麼情況下使用 為什麼
Class.forName()是根據類名稱來載入類 比如有一個類源名為com.abc.AAA 此處Class.forName(『com.abc.AAA 』).newInstance()就會創建一個AAA對象而.class一般用來獲取類的通用屬性 比如AAA.class.getDeclareMethod()是獲取AAA類的所有聲明的方法 主要用於反射機制
❽ java下Class.forName的作用是什麼,為什麼要使用它
首先你要明白在java裡面任何class都要裝載在虛擬機上才能運行。這句話就是裝載類用的(和new不一樣,要分清楚)。
Aa=(A)Class.forName("pacage.A").newInstance();這和你Aa=newA();
是一樣的效果。
關於補充的問題
答案是肯定的,jvm會執行靜態代碼段,你要記住一個概念,靜態代碼是和class綁定的,class裝載成功就表示執行了你的靜態代碼了。而且以後不會再走這段靜態代碼了。
Class.forName(xxx.xx.xx)返回的是一個類
Class.forName(xxx.xx.xx);的作用是要求JVM查找並載入指定的類,也就是說JVM會執行該類的靜態代碼段
動態載入和創建Class對象,比如想根據用戶輸入的字元串來創建對象
Stringstr=用戶輸入的字元串
Classt=Class.forName(str);
t.newInstance();
classc=Class.forName(Example);
factory=(ExampleInterface)c.newInstance();
其中ExampleInterface是Example的介面,可以寫成如下形式:
StringclassName="Example";
classc=Class.forName(className);
factory=(ExampleInterface)c.newInstance();
進一步可以寫成如下形式:
StringclassName=readfromXMlConfig;//從xml配置文件中獲得字元串
classc=Class.forName(className);
factory=(ExampleInterface)c.newInstance();
從JVM的角度看,我們使用關鍵字new創建一個類的時候,這個類可以沒有被載入。但是使用newInstance()方法的時候,就必須保證:1、這個類已經載入;2、這個類已經連接了。而完成上面兩個步驟的正是Class的靜態方法forName()所完成的,這個靜態方法調用了啟動類載入器,即載入javaAPI的那個載入器。
現在可以看出,newInstance()實際上是把new這個方式分解為兩步,即首先調用Class載入方法載入某個類,然後實例化。這樣分步的好處是顯而易見的。我們可以在調用class的靜態載入方法forName時獲得更好的靈活性,提供給了一種降耦的手段。
最後用最簡單的描述來區分new關鍵字和newInstance()方法的區別:
newInstance:弱類型。低效率。只能調用無參構造。
new:強類型。相對高效。
❾ JAVA反射中通過Class.forname()如何帶參數的方法怎麼賦值和調用呀
forName()是java.lang.Class類的一個方法, 如下
static Class forName(String className) :
返回與帶有給定字元串名的類或介面相關聯的 Class 對象 。
這句話說的太繞專口了,舉屬個例子吧:
Class t = Class.forName("java.lang.Thread")
執行完這句話,Thread類將被虛擬機載入了
類載入以後就可以創建實例,調用屬性和方法嘍。