按照老习惯,先上代码
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(); } } }