java反射概述
Java反射( Reflection )是Java非常重要的動態特性,通過使用反射我們不僅可以獲取到任何類的
成員方法( Methods)、成員變數( Fields )、構造方法( Constructors )等資訊,還可以動態
創建Java類實體、呼叫任意的類方法、修改任意的類成員變數值等,Java反射機制是Java語言的動態性的重要體現,也是Java的各種框架底層實作的靈魂,
1.什么是類物件
? 類的物件:基于某個類 new 出來的物件,也稱為實體物件,
? 類物件:類加載的產物,封裝了一個類的所有資訊(類名、父類、介面、
屬性、方法、構造方法)
2.獲取類物件的三種方法
? 通過類的物件,獲取類物件
? Student s = new Student();
? Class c = s.getClass();
? 通過類名獲取類物件
? Class c = 類名.class;(不算反射)
? 通過靜態方法獲取類物件
? Class c=Class.forName(“包名.類名”);
3.反射java.lang.Runtime
依靠java.lang.Runtime中的exec方法命令執行,

代碼展示:
package com.rayxxx;
import java.lang.reflect.Method;
public class ceshi {
public static void main(String[] args) throws Exception{
Class clazz = Class.forName("java.lang.Runtime");
Method execMethod = clazz.getMethod("exec", String.class);
Method getRuntimeMethod = clazz.getMethod("getRuntime");
Object runtime = getRuntimeMethod.invoke(clazz);
execMethod.invoke(runtime, "calc.exe");
}
}
代碼分析:
1.Class clazz = Class.forName("java.lang.Runtime");// 獲取Runtime類物件
2.Method execMethod = clazz.getMethod("exec", String.class);//獲取 Runtime.exec方法
3.Method getRuntimeMethod = clazz.getMethod("getRuntime");//獲取 Runtime.getRuntime方法
4.Object runtime = getRuntimeMethod.invoke(clazz);//invoke執行getRuntime方法
4.反射呼叫類方法
獲取當前類所有的成員方法:
Method[] methods = clazz.getDeclaredMethods()
獲取當前類指定的成員方法:
Method method = clazz.getDeclaredMethod("方法名");
Method method = clazz.getDeclaredMethod("方法名", 引數型別如String.class,多個引數用","號隔開);
反射呼叫方法
獲取到java.lang.reflect.Method物件以后我們可以通過Method的invoke方法來呼叫類方法,
呼叫類方法代碼片段:
method.invoke(方法實體物件, 方法引數值,多個引數值用","隔開);
5.反射呼叫成員變數
獲取當前類的所有成員變數:
Field fields = clazz.getDeclaredFields();
獲取當前類指定的成員變數:
Field field = clazz.getDeclaredField("變數名");
getField和getDeclaredField的區別同getMethod和getDeclaredMethod,
獲取成員變數值:
Object obj = field.get(類實體物件);
修改成員變數值:
field.set(類實體物件, 修改后的值);
6.總結常用方法
? public String getName()
? public Package getPackage()
? public Class getSuperclass()**
**? public Class[] getInterfaces()
? public Field[] getFields()
? public Method[] getMethods()
? public Constructor<?>[] getConstructors()
? public T newInstance()
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/498593.html
標籤:其他
下一篇:聊聊 C++ 中幾類特殊成員函式
