標籤:serial ace last sub tco dex getc sys void
1反射機制是什麼
反射機制是在運行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個對象,都能夠調用它的任意一個方法和屬性;這種動態擷取的資訊以及動態調用對象的方法的功能稱為java語言的反射機制。
2反射機制能做什麼
反射機制主要提供了以下功能:
在運行時判斷任意一個對象所屬的類;
在運行時構造任意一個類的對象;
在運行時判斷任意一個類所具有的成員變數和方法;
在運行時調用任意一個對象的方法;
產生動態代理。
3反射機制的相關API通過一個對象獲得完整的包名和類名
package edu.pri.lime.test;public class TestReflect { public static void main(String[] args){ TestReflect reflect = new TestReflect();// 通過一個對象獲得完整的包名和類名 System.out.println(reflect.getClass().getName()); }}
執行個體化Class類對象
package edu.pri.lime.test;public class TestReflect { public static void main(String[] args) throws ClassNotFoundException{ Class<?> clazzA = Class.forName("edu.pri.lime.test.TestReflect"); Class<?> clazzB = new TestReflect().getClass(); Class<?> clazzC = TestReflect.class; System.out.println(clazzA.getName()); System.out.println(clazzB.getName()); System.out.println(clazzC.getName()); }}
擷取一個對象的父類與實現的介面
package edu.pri.lime.test;import java.io.Serializable;public class TestReflect implements Serializable{ private static final long serialVersionUID = -3407476067923921222L; public static void main(String[] args) throws ClassNotFoundException{ Class<?> clazz = Class.forName("edu.pri.lime.test.TestReflect");// 擷取父類 Class<?> clazzSup = clazz.getSuperclass(); System.out.println(clazzSup.getName()); // 擷取所有介面 Class<?> clazzInte[] = clazz.getInterfaces(); for(Class<?> in : clazzInte){ System.out.println(in.getName()); } }}
擷取某個類中的全部建構函式
package edu.pri.lime.test;import java.io.Serializable;import java.lang.reflect.Constructor;import java.lang.reflect.Modifier;public class TestReflect implements Serializable{ private static final long serialVersionUID = -3407476067923921222L; private int id; private String name; public TestReflect() { super(); // TODO Auto-generated constructor stub } public TestReflect(int id) { super(); this.id = id; } public TestReflect(String name) { super(); this.name = name; } public TestReflect(int id, String name) { super(); this.id = id; this.name = name; } public static void main(String[] args) throws ClassNotFoundException{ Class<?> clazz = Class.forName("edu.pri.lime.test.TestReflect");// 擷取所有建構函式 Constructor<?>[] constructors = clazz.getConstructors(); for(Constructor<?> con : constructors){// 擷取建構函式所有參數類型 Class<?>[] paramTypes = con.getParameterTypes(); System.out.print(Modifier.toString(con.getModifiers()) + " "); System.out.print(con.getName() + "("); for(int i = 0;i < paramTypes.length;i++){ if(i < paramTypes.length - 1){ System.out.print(paramTypes[i].getName().substring(paramTypes[i].getName().lastIndexOf(".") + 1) + ","); }else{ System.out.print(paramTypes[i].getName().substring(paramTypes[i].getName().lastIndexOf(".") + 1)); } } System.out.println(");"); } }}
通過反射機制執行個體化一個類的對象
java.lang.Class<T> -- 反射機制