反射(方法和字段的獲取)
阿新 • • 發佈:2018-09-22
構造方法 exce tostring truct print forname otto 所有 color
Person類
public class Person { public String id; private String name; private Person() { System.out.println("私有的無參的構造方法"); // TODO Auto-generated constructor stub } public Person(String name){ System.out.println("有參的構造方法"); this.name = name; } public void show(){ System.out.println("公有的無參的show方法"); } public void show(String name){ System.out.println("公有的有參的show方法"); } private void private_show(){ System.out.println("私有的無參的show方法"); } public void private_show(String name){ System.out.println("私有的有參的show方法"); } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Person [id=" + id + ", name=" + name + "]"; } }
測試類
public class Test { public static void main(String[] args) throws Exception { Class clazz = Class.forName("fanshefangfa.Person"); //1.獲取所有的public 構造方法(包括父類的) System.out.println("獲取所有的public 構造方法"); Constructor[] constructors = clazz.getConstructors(); for (Constructor constructor : constructors) { System.out.println(constructor); } //2. 獲取所有的構造方法( System.out.println("獲取所有的構造方法(+私有的)"); Constructor[] declaredConstructors = clazz.getDeclaredConstructors(); for (Constructor constructor : declaredConstructors) { System.out.println(constructor); } //3.獲取所有的方法(公共的包括父類的) System.out.println("獲取所有的方法(公共的)"); Method[] methods = clazz.getMethods(); for (Method method : methods) { System.out.println(method); } // 4. 獲取所有的方法(本類的所有方法) System.out.println("獲取所有的方法"); Method[] declaredMethods = clazz.getDeclaredMethods(); for (Method method : declaredMethods) { System.out.println(method); } //5. 獲取某個構造方法,創建對象 Constructor constructor = clazz.getConstructor(String.class); Person person = (Person) constructor.newInstance("小明"); //6.獲取某個公共的普通方法 Method m1 = clazz.getMethod("show", null); m1.invoke(person,null); //7.獲取某個有參的公共的普通方法 Method m2 = clazz.getMethod("show", String.class); m2.invoke(person, "1"); //8.獲取某個私有的,無參的普通方法 Method m3 = clazz.getDeclaredMethod("private_show",null); m3.setAccessible(true); m3.invoke(person, null); //9. 獲取某個私有的,有參的普通方法 Method m4 = clazz.getDeclaredMethod("private_show",String.class); m4.setAccessible(true); m4.invoke(person, "x"); //10. 獲取所有的公有的字段 System.out.println("獲取所有的字段:(公有的)"); Field[] fields = clazz.getFields(); for (Field field : fields) { System.out.println(field); } //11. 獲取所有的字段 System.out.println("獲取所有的字段:(所有的)"); Field[] declaredFields = clazz.getDeclaredFields(); for (Field field : declaredFields) { System.out.println(field); } //12 .修改某個字段(公有的) Field field = clazz.getField("id"); field.set(person, "老王"); System.out.println(person); //13 .修改某個字段(私有有的) Field field2 = clazz.getDeclaredField("name"); field2.setAccessible(true); field2.set(person, "小王"); System.out.println(person); } }
輸出
獲取所有的public 構造方法 public fanshefangfa.Person(java.lang.String) 獲取所有的構造方法(+私有的) private fanshefangfa.Person() public fanshefangfa.Person(java.lang.String) 獲取所有的方法(公共的) public java.lang.String fanshefangfa.Person.toString() public java.lang.String fanshefangfa.Person.getName() public java.lang.String fanshefangfa.Person.getId() public void fanshefangfa.Person.setName(java.lang.String) public void fanshefangfa.Person.show(java.lang.String) public void fanshefangfa.Person.show() public void fanshefangfa.Person.private_show(java.lang.String) public void fanshefangfa.Person.setId(java.lang.String) public final void java.lang.Object.wait() throws java.lang.InterruptedException public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException public boolean java.lang.Object.equals(java.lang.Object) public native int java.lang.Object.hashCode() public final native java.lang.Class java.lang.Object.getClass() public final native void java.lang.Object.notify() public final native void java.lang.Object.notifyAll() 獲取所有的方法 public java.lang.String fanshefangfa.Person.toString() public java.lang.String fanshefangfa.Person.getName() public java.lang.String fanshefangfa.Person.getId() public void fanshefangfa.Person.setName(java.lang.String) public void fanshefangfa.Person.show(java.lang.String) public void fanshefangfa.Person.show() public void fanshefangfa.Person.private_show(java.lang.String) private void fanshefangfa.Person.private_show() public void fanshefangfa.Person.setId(java.lang.String) 有參的構造方法 公有的無參的show方法 公有的有參的show方法 私有的無參的show方法 私有的有參的show方法 獲取所有的字段:(公有的) public java.lang.String fanshefangfa.Person.id 獲取所有的字段:(所有的) public java.lang.String fanshefangfa.Person.id private java.lang.String fanshefangfa.Person.name Person [id=老王, name=小明] Person [id=老王, name=小王]
<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">
反射(方法和字段的獲取)