按照老習慣,先上代碼
java
package com.yuan.refletion; class A { public int count; public int getCount() { return count; } public void setCount(int count) { this.count = count; } public A(int start) { count = start; System.out.println("A 構造方法:"+count); } public void increase(int step) { count = count + step; } }
測試 Java 反射測試
package com.yuan.refletion; import java.lang.reflect.*; class B { public static void main(String args[]) { A Aa = new A(0); //通常作法 Aa.increase(2); System.out.println("Normal -> " + Aa.getCount()); try { Constructor<A> constructor = A.class.getConstructor(int.class); //獲取構造方法 A AReflect =(A)constructor.newInstance(10); //建立對象 Method method = A.class.getMethod("increase", int.class); //獲取方法 method.invoke(AReflect, 15); //調用方法 Field field = A.class.getField("count"); //獲取域 System.out.println("Reflect -> " + field.getInt(AReflect)); //獲取域的值 } catch (Exception e) { e.printStackTrace(); } } }
output:this
A 構造方法:0spa
Normal -> 2code
A 構造方法:10orm
Reflect -> 25對象
package com.yuan.refletion; class A { private int count;//設置爲私有變量 public int getCount() { return count; } public void setCount(int count) { this.count = count; } public A(int start) { count = start; System.out.println("A 構造方法:"+count); } public void increase(int step) { count = count + step; } }
測試get
package com.yuan.refletion; import java.lang.reflect.*; class B { public static void main(String args[]) { A Aa = new A(0); //通常作法 Aa.increase(2); System.out.println("Normal -> " + Aa.getCount()); try { Constructor<A> constructor = A.class.getConstructor(int.class); //獲取構造方法 A AReflect =(A)constructor.newInstance(10); //建立對象 Method method = A.class.getMethod("increase", int.class); //獲取方法 method.invoke(AReflect, 15); //調用方法 Field field =A.class.getDeclaredField("count");//這個應該能夠獲取到全部的變量 //A.class.getField("count"); //獲取域 field.setAccessible(true);//設置是否有權限獲取 System.out.println("Reflect -> " + field.getInt(AReflect)); //獲取域的值 } catch (Exception e) { e.printStackTrace(); } } }