當前位置:首頁 » 編程語言 » java反射實例

java反射實例

發布時間: 2022-04-07 13:58:33

java反射實例化方法的問題

少用null,換成空串

new一個

⑵ java反射的實際案例,java反射的作用

反射的一個最簡單的應用就是可以通過類的全限定名來創建對象,可以獲取類的私有屬性等,從這個就可以看出反射的強大之處

⑶ java 怎麼反射包名下指定實例

public static void main(String[] args){
try {
Class cla = Class.forName("com.ssm.test.Test");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
是這樣子嗎? 希望能幫到你!

⑷ java反射 實例化對象

public class Test2 {

@SuppressWarnings("unchecked")
public static void main(String[] args) {
List<String[]> list = new ArrayList<String[]>();
list.add(new String[] {"Test2", "test", "printTestString"});
for (String[] strs : list) {
if (strs != null && strs.length == 3) {
try {
Class clazz = Class.forName(strs[0]);
Method method = clazz.getDeclaredMethod(strs[1], String.class);
Object obj = method.invoke(clazz.newInstance(), strs[2]);
System.out.println("結果:" + obj);

} catch(Exception e) {
e.printStackTrace();
}
}
}
}

public String test(String str) {
System.out.println(str);
return str;
}

}

⑸ java如何用反射獲取類實例

class類有newInstance() 這個方法就可以用來生成實例。

⑹ Java反射實現幾種方式

1. 通過Object類的getClass方法來獲取
java.lang.Object中定義有getClass方法:public final Class getClass()
所有Java對象都具備這個方法,該方法用於返回調用該方法的對象的所屬類關聯的Class對象,例如:
Date date1 = new Date();
Date date2 = new Date();
Class c1 = date1.getClass();
Class c2 = date2.getClass();
System.out.println(c1.getName());
// java.util.Date
System.out.println(c1 == c2);
// true
上面的代碼中,調用Date對象date1的getClass方法將返回用於封裝Date類信息的Class對象。
這里調用了Class類的getName方法:public String getName(),這個方法的含義很直觀,即返回所封裝的類的名稱。
需要注意的是,代碼中的date1和date2的getClass方法返回了相同的Class對象(c1==c2的值為true)。這是因為,對於相同的類,JVM只會載入一次,而與該類對應的Class對象也只會存在一個,無論該類實例化了多少對象。
另外,需要強調的是,當一個對象被其父類的引用或其實現的介面類型的引用所指向時,getClass方法返回的是與對象實際所屬類關聯的Class對象。例如:
List list = new ArrayList();
System.out.println(list.getClass().getName()); // java.util.ArrayList
上面的代碼中,語句list.getClass()方法返回的是list所指向對象實際所屬類java.util.ArrayList對應的 Class對象而並未java.util.List所對應的Class對象。有些時候可以通過這個方法了解一個對象的運行時類型,例如:
HashSet set = new HashSet();
Iterator it = set.iterator();
System.out.println(it.getClass().getName()); //java.util.HashMap$KeyIterator
從代碼可以看出,HashSet的iterator方法返回的是實現了Iterator介面的HashMap內部類(KeyIterator)對象。
因為抽象類和介面不可能實例化對象,因此不能通過Object的getClass方法獲得與抽象類和介面關聯的Class對象。
2. 使用.class的方式
使用類名加「.class」的方式即會返回與該類對應的Class對象。例如:
Class clazz = String.class;
System.out.println(clazz.getName()); // java.lang.String
這個方法可以直接獲得與指定類關聯的Class對象,而並不需要有該類的對象存在。
3. 使用Class.forName方法
Class有一個著名的static方法forName:public static Class forName(String className) throws ClassNotFoundException
該方法可以根據字元串參數所指定的類名獲取與該類關聯的Class對象。如果該類還沒有被裝入,該方法會將該類裝入JVM。
該方法聲明拋出ClassNotFoundException異常。顧名思義,當該方法無法獲取需要裝入的類時(例如,在當前類路徑中不存在這個類),就會拋出這個異常。
例如,如果當前類路徑中存在Foo類:
package org.whatisjava.reflect;
public class Foo {
public Foo() {
System.out.println("Foo()");
}
static {
System.out.println("Foo is initialized");
}
}
運行下面的代碼:
Class clazz = Class.forName("org.whatisjava.reflect.Foo");
控制台會有如下輸出:
Foo is initialized
Class.forName("org.whatisjava.reflect.Foo")首先會將reflection.Foo類裝入JVM,並返回與之關聯的Class對象。JVM裝入Foo類後對其進行初始化,調用了其static塊中的代碼。需要注意的是:forName方法的參數是類的完 整限定名(即包含包名)。
區別於前面兩種獲取Class對象的方法:使用Class.forName方法所要獲取的與之對應的Class對象的類可以通過字元串的方式給定。該方法通常用於在程序運行時根據類名動態的載入該類並獲得與之對應的Class對象。
通過上面的文章相信你對java的反射機制有了一定的認識,同時也對java中Class類的用法有了比較清晰的理解,在我們實際工作的過程中,我們不斷的運用java知識來解決實際生活中的問題的時候我們就能對java反射機制有一個更深入的理解!

⑺ 如何使用JAVA反射/JAVA反射實例

Class<?>class1=null;
class1=Class.forName("com.demo.Person");
//由於這里不能帶參數,所以你要實例化的這個類Person,一定要有無參構造函數哈~
Personperson=(Person)class1.newInstance();
person.setAge(20);
person.setName("LeeFeng");

⑻ 舉一個java反射的例子,反射一般在java中什麼時候用Interceptor是通過反射實現的嗎

比如說自己定義了一個annotation,然後要自己寫一個解析器,此時用反射。

還有一些MVC的例子,假如在xml文件中定義了action類與其對應的logic類,可以通過反射在action中獲得logic的實例;如果在action的父類中定義了類似直接在action中調用logic方法的方法,我們可以通過給方法中傳入logic的類名和方法名直接反射調用方法。

⑼ Java 通過絕對路徑反射,創建類的實例

Class.forName參數需要傳的是一個類名,而不是一個文件名。
這個類需要是在classpath范圍中的

熱點內容
安卓鴻蒙蘋果哪個好用 發布:2025-01-19 10:32:33 瀏覽:264
正規物業保安怎麼配置 發布:2025-01-19 10:27:30 瀏覽:518
斷裂下載ftp 發布:2025-01-19 10:27:30 瀏覽:641
安卓導航怎麼調對比度 發布:2025-01-19 10:26:52 瀏覽:25
伺服器共享文件如何查看訪問記錄 發布:2025-01-19 10:08:55 瀏覽:400
datasourceSQL 發布:2025-01-19 10:01:25 瀏覽:838
aspnet網站的編譯 發布:2025-01-19 10:00:49 瀏覽:334
路特仕A9工廠密碼是多少 發布:2025-01-19 09:59:44 瀏覽:257
linux的命令find 發布:2025-01-19 09:42:55 瀏覽:174
簡單的計算機編程 發布:2025-01-19 09:39:54 瀏覽:520