java反射常用類
阿新 • • 發佈:2018-08-25
owin () [1] value obj 實體 .class object ext
- 測試實體類
public class TestClass { public String classInfo; public String getClassInfo() { return classInfo; } public TestClass(String classInfo) { this.classInfo = classInfo; System.out.println("invoke this param classInfo constructor."); } public TestClass() { System.out.println("invoke this default constructor."); } public void setClassInfo(String classInfo) { this.classInfo = classInfo; } static { System.out.println("init first class."); } public void showinfo() { System.out.println("this is default show info method."); } public void showinfo(String info) { System.out.println("this is have param method."); System.out.println("param context:"+info); } }
- 測試實現類
import org.junit.Test; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; public class getClassInfoTest { @Test public void testDemo() throws Exception { /** * 1.實現反射的第一步:獲取對象的類型信息,java中指存放類型信息的.class文件 * 2.在這裏是獲取對象的所有構造方法. * 3.找到需要的構造方法. * 4.調用指定構造方法,創建對象. */ Class clazz=Class.forName("TestClass"); /** * 獲取構造方法 * 調用newInstance(...) 相當於 new TestClass(...) */ Constructor[] constructors=clazz.getConstructors(); System.out.println("constructor item:"+‘\n‘); arrayToStringItem(constructors); Object test=constructors[0].newInstance(); Object test2=constructors[1].newInstance("hello"); /** * 獲取屬性 */ Field[] fields=clazz.getFields(); System.out.println("field item:"+‘\n‘); arrayToStringItem(fields); Field field=fields[0]; System.out.println("field name:"+field.getName()); System.out.println("get dafault constructor field value:"+field.get(test)); System.out.println("get have param constructor field value:"+field.get(test2)); /** * 獲取方法 */ Method[] methods=clazz.getMethods(); System.out.println("method item:"+‘\n‘); arrayToStringItem(methods); System.out.println("invoke "+methods[0].getName()+" get return value:"+methods[0].invoke(test2)); } public void arrayToStringItem(Object[] args) { for (Object c:args) { System.out.println(c); } } }
java反射常用類