javase---Java反射操作
1首先认识什么叫反射
正常的情况下,我们操作一个对象,则必须找到这个对象对应的类,然后实例化,然后再做各种操作,
反射的则通过一个对象获取对应的类,然后实例化,然后做各种操作,
2反射的操作步骤
I获取到Class类
①Object.class
System.out.println(Bean.class.getName());
②object.class
Bean bean=new Bean(); System.out.println(bean.getClass().getName());
③Class.forName("全类名")
Class<?> cls = Class.forName(bean.getClass().getName()); System.out.println(cls.getName());
2实例化Class.newInstance();
Class<?> cls = Class.forName(bean.getClass().getName()); System.out.println(cls.getName()); Bean bean= (Bean)cls.newInstance(); System.out.println(newInstance.sayHello("test"));
3取得对应的方法并操作
①获取方法
//1---先获取到方法,而且也要把对应的参数类型写上 Method method = cls.getMethod("sayHello",String.class);
②执行方法
//2执行取到的方法,并传递参数 Object invoke =(String)method.invoke(cls.newInstance(), "test2"); //3获取返回值 System.out.println(invoke);
4取得对应属性并操作
①获取属性
//操作属性 Field fieldname=cls.getDeclaredField("name");
②操作属性
fieldname.setAccessible(true); fieldname.set(bean, "jeremy"); System.out.println(bean.getName());
//因为要设置属性可见,也就是没权限言,所以一般不建议使用
使用setter和getter方法来操作
//操作属性 Method setMethod=cls.getMethod("setName", String.class); setMethod.invoke(bean, "ssss"); System.out.println(bean.getName());