package testreflect;
class MyClass {
public int count;
public MyClass(int start) {
count = start;
}
public void increase(int step) {
count = count + step;
}
public int aaa(int a)
{
return 12;
}
}
package testreflect;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class MyClassTest {
/*反射实现的步骤:
* 1.如果原类有构造函数就得先实例化该类
* 2.通过实例化之后的对象来获取当前对象的一个构造函数
* 3.通过此构造函数对象来创建一个新实例对象
* 4.通过此新实例对象来获取运行时类中的方法
* 5.再通过此方法对象来调用invoke(obj,canshu)
* 6.可以通过已创建的新实例对象来获取相应的域值
*
*/
public static void main(String[] args)throws Exception
{
MyClass myClass=new MyClass(1);
myClass.increase(3);
System.out.println("normal ->"+myClass.count);
//获取构造方法
//Constructor cons=MyClass.class.getConstructor(int.class);
Constructor cons=myClass.getClass().getConstructor(int.class);
//用获取的构造方法来创建一个实例
MyClass myclass_reflect=(MyClass) cons.newInstance(3);
Method method=myclass_reflect.getClass().getMethod("increase",int.class);
//Method method=MyClass.class.getMethod("increase",int.class);
System.out.println(method.getName()+" "+method.getReturnType());
System.out.println(method);
//回调,第一个参数指调用的对象,第二个参数指调用方法的参数
method.invoke(myclass_reflect,5);
Field field=myclass_reflect.getClass().getField("count");
System.out.println("field "+field.getName()+" "+field.getInt(myclass_reflect));
}
}
java反射机制
最新推荐文章于 2023-06-22 19:54:38 发布