導航:首頁 > 編程語言 > java反射的例子

java反射的例子

發布時間:2022-04-11 18:08:16

『壹』 java反射機制的作用請舉例說明。

比較全的解釋了:JAVA反射機制
JAVA反射機制是在運行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個對象,都能夠調用它的任意一個方法;這種動態獲取的信息以及動態調用對象的方法的功能稱為java語言的反射機制。
Java反射機制主要提供了以下功能: 在運行時判斷任意一個對象所屬的類;在運行時構造任意一個類的對象;在運行時判斷任意一個類所具有的成員變數和方法;在運行時調用任意一個對象的方法;生成動態代理。
1. 得到某個對象的屬性

1 public Object getProperty(Object owner, String fieldName) throws Exception {
2 Class ownerClass = owner.getClass();
3
4 Field field = ownerClass.getField(fieldName);
5
6 Object property = field.get(owner);
7
8 return property;
9 }
Class ownerClass = owner.getClass():得到該對象的Class。

Field field = ownerClass.getField(fieldName):通過Class得到類聲明的屬性。

Object property = field.get(owner):通過對象得到該屬性的實例,如果這個屬性是非公有的,這里會報IllegalAccessException。

2. 得到某個類的靜態屬性

1 public Object getStaticProperty(String className, String fieldName)
2 throws Exception {
3 Class ownerClass = Class.forName(className);
4
5 Field field = ownerClass.getField(fieldName);
6
7 Object property = field.get(ownerClass);
8
9 return property;
10 }

Class ownerClass = Class.forName(className) :首先得到這個類的Class。

Field field = ownerClass.getField(fieldName):和上面一樣,通過Class得到類聲明的屬性。

Object property = field.get(ownerClass) :這里和上面有些不同,因為該屬性是靜態的,所以直接從類的Class里取。

3. 執行某對象的方法

1 public Object invokeMethod(Object owner, String methodName, Object[] args) throws Exception {
2
3 Class ownerClass = owner.getClass();
4
5 Class[] argsClass = new Class[args.length];
6
7 for (int i = 0, j = args.length; i < j; i++) {
8 argsClass[i] = args[i].getClass();
9 }
10
11 Method method = ownerClass.getMethod(methodName, argsClass);
12
13 return method.invoke(owner, args);
14 }
Class owner_class = owner.getClass() :首先還是必須得到這個對象的Class。

5~9行:配置參數的Class數組,作為尋找Method的條件。

Method method = ownerClass.getMethod(methodName, argsClass):通過Method名和參數的Class數組得到要執行的Method。

method.invoke(owner, args):執行該Method,invoke方法的參數是執行這個方法的對象,和參數數組。返回值是Object,也既是該方法的返回值。

4. 執行某個類的靜態方法

1 public Object invokeStaticMethod(String className, String methodName,
2 Object[] args) throws Exception {
3 Class ownerClass = Class.forName(className);
4
5 Class[] argsClass = new Class[args.length];
6
7 for (int i = 0, j = args.length; i < j; i++) {
8 argsClass[i] = args[i].getClass();
9 }
10
11 Method method = ownerClass.getMethod(methodName, argsClass);
12
13 return method.invoke(null, args);
14 }

基本的原理和實例3相同,不同點是最後一行,invoke的一個參數是null,因為這是靜態方法,不需要藉助實例運行。

5. 新建實例
1
2 public Object newInstance(String className, Object[] args) throws Exception {
3 Class newoneClass = Class.forName(className);
4
5 Class[] argsClass = new Class[args.length];
6
7 for (int i = 0, j = args.length; i < j; i++) {
8 argsClass[i] = args[i].getClass();
9 }
10
11 Constructor cons = newoneClass.getConstructor(argsClass);
12
13 return cons.newInstance(args);
14
15 }

這里說的方法是執行帶參數的構造函數來新建實例的方法。如果不需要參數,可以直接使用newoneClass.newInstance()來實現。

Class newoneClass = Class.forName(className):第一步,得到要構造的實例的Class。

第5~第9行:得到參數的Class數組。

Constructor cons = newoneClass.getConstructor(argsClass):得到構造子。

cons.newInstance(args):新建實例。

6. 判斷是否為某個類的實例

1 public boolean isInstance(Object obj, Class cls) {
2 return cls.isInstance(obj);
3 }

7. 得到數組中的某個元素
1 public Object getByArray(Object array, int index) {
2 return Array.get(array,index);
3 }

『貳』 Java的反射到底有什麼用途

反射的作用可謂是博大精深,

  1. JDK動態代理生成代理類的位元組碼後,首先把這個類通過defineclass定義成一個類,然後用class.for(name)會把該類載入到jvm,之後我們就可以通過,A.class.GetMethod()獲取其方法,然後通過invoke調用其方法,在調用這個方法時,實際上會通過被代理類的引用再去調用原方法。

  2. Java反射包reflection提供對Class,Method,field,constructor1 等信息的封裝類型

  3. 通過這些api可以輕易獲得一個類的各種信息並且可以進行實例化,方法調用等。
    類中的private參數可以通過setaccessible方法強制獲取。

『叄』 JAVA中反射是什麼

JAVA中反射是動態獲取信息以及動態調用對象方法的一種反射機制。

Java反射就是在運行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個對象,都能夠調用它的任意方法和屬性;並且能改變它的屬性。而這也是Java被視為動態語言的一個關鍵性質。

Java反射的功能是在運行時判斷任意一個對象所屬的類,在運行時構造任意一個類的對象,在運行時判斷任意一個類所具有的成員變數和方法,在運行時調用任意一個對象的方法,生成動態代理。

(3)java反射的例子擴展閱讀:

JAVA中反射實例:

1、Class superClass=clazz.getSuperclass();//獲取父類。

System.out.println("getSuperclass:"+superClass)。

2、Class[] interfaces=clazz.getInterfaces();//獲取實現介面。

System.out.println("getInterfaces:"+interfaces.length)。

3、Constructor[] cons=clazz.getConstructors();//構造方法。

System.out.println("getConstructors:"+cons.length)。

參考資料來源:網路: JAVA反射機制

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

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

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

『伍』 java反射機制實例

import java.lang.reflect.Method;

public class InvokeTester
{
public int add(int param1, int param2)
{
return param1 + param2;
}

public String echo(String message)
{
return "hello: " + message;
}

public static void main(String[] args) throws Exception
{
Class<?> classType = InvokeTester.class;

Object invokeTester = classType.newInstance();

// System.out.println(invokeTester instanceof InvokeTester); //返回true

Method addMethod = classType.getMethod("add", new Class[] { int.class,int.class }); //第二個形參表示指定的add方法要接收為int的類型的兩個參數

Object result = addMethod.invoke(invokeTester, new Object[]{1, 2}); //反射調用,將1,2傳入InvokeTester.Class的實例invokeTester里的add方法。得返回的結果。

System.out.println((Integer)result);

System.out.println("---------------------");

Method echoMethod = classType.getMethod("echo", new Class[]{String.class});

Object result2 = echoMethod.invoke(invokeTester, new Object[]{"tom"});

System.out.println((String)result2);
}
}

『陸』 java中反射原理,和應用

此問題就是給你寫一篇10000字的作文都不一定能將的清楚,我大致上說一下,反射的原理:一類事物在一起統稱一個類class,所有的class在一起統稱類Class,注意大小寫;用類CLass去調用我們的一個類class用的就是反射,在SSH裡面經常有配置文件裡面需要寫一個類的全名,然後框架就會去調用這個類,你想過為什麼嗎?他系統有不可能直接NEW一個你這個類的對象,他是如何調用類裡面的方法?這個就是反射的強大之處了,不用new的,只要一個類的全名就能執行裡面的方法

『柒』 哪些項目中用到了Java反射機制

什麼是反射?將類的每個組件封裝到另一個對象中的過程稱為反射。其中,組件表示我們類的成員變數(Field)、構造方法(Constructor)和成員方法(Method)。反射使您可以在程序運行期間操作類對象,從而提高程序的靈活性。解耦提高了程序的可擴展性,提高了代碼重用率,便於外部調用。任何類別只要知道類別名稱,就可以知道該類別的所有屬性和方法。

反射像鏡子一樣,讓開發者知道這個類中有哪些成員。大多數人想知道Java有包,為什麼會有反射。破壞封裝性。通過允許外部訪問個人變數,使類不太安全。就我個人而言,反射機制實際上是上帝的模型。如果方法的調用是Java正確的打開方式,那麼反射機制就是上帝偷偷打開的後門。只要有相應的class存在,什麼都可以調用。那麼,上帝為什麼要打開這個後門呢?這包括靜態和動態概念。

『捌』 如何使用JAVA反射/JAVA反射實例

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

『玖』 Java:描述反射機制的作用舉幾個反射的應用

說多多的也沒用,我就簡單給你介紹幾個。既然你學了Java,那麼反射就算你不會,你在學習過程中也會經常遇到。1、有了反射機制,那麼就能逆向代碼了,反編譯器就是這個原理。2、像流行的框架,Spring,Hibernate等,就是利用反射機制,要不然怎麼可能你配置下文件就完事呢3、動態生成類啊,當然spring裡面都用到了。希望我的回答對你有幫助!

『拾』 java反射有哪些例子

struts2框架就是最典型的反射例子,它的核心控制器攔截器就是典型的反射。

閱讀全文

與java反射的例子相關的資料

熱點內容
優信二手車解壓後過戶 瀏覽:61
Windows常用c編譯器 瀏覽:778
關於改善國家網路安全的行政命令 瀏覽:833
安卓如何下載網易荒野pc服 瀏覽:654
javainetaddress 瀏覽:104
蘋果4s固件下載完了怎麼解壓 瀏覽:1002
命令zpa 瀏覽:285
python編譯器小程序 瀏覽:944
在app上看視頻怎麼光線調暗 瀏覽:540
可以中文解壓的解壓軟體 瀏覽:591
安卓卸載組件應用怎麼安裝 瀏覽:912
使用面向對象編程的方式 瀏覽:339
程序員項目經理的年終總結範文 瀏覽:929
內衣的加密設計用來幹嘛的 瀏覽:432
淮安數據加密 瀏覽:292
魔高一丈指標源碼 瀏覽:982
松下php研究所 瀏覽:168
c回調java 瀏覽:399
夢幻端游長安地圖互通源碼 瀏覽:745
電腦本地文件如何上傳伺服器 瀏覽:312