Reflect反射简略教程

不羁的心 提交于 2020-02-01 18:13:21

java的反射机制使java成为一种动态语言,通过反射机制能够在运行时或的一个对象的所有信息,包括他的包名,它的所有方法和成员变量。当然知道包名可以直接取得该类,从而获得他的实例。

获取Class对象

12345678
class = b.getClass();//通过完整包类名获得:class = Class.fromName("包名.类名")//本包可以通过.class获得:class = 类名.class

通过反射调用私有方法

123456789101112131415161718192021
//获得类Class<?> c1 = persen.getClass();try {    //通过方法名获得方法,这是私有方法    Method method1 = c1.getDeclaredMethod("method1");    //调用方法私有方法的关键    method1.setAccessible(true); //设置该私有方法可被调用    //方法调用    method1.invoke(c1.newInstance());    //这是带参数的方法,需要在获得方法的时候把参数的类型都加上    Method method2 = c1.getDeclaredMethod("method2",String.class);    //调用方法,填写参数    method2.invoke(c1.newInstance(),"kk");    //这是有返回值的方法    Method method3 = c1.getDeclaredMethod("method3");    return (int) method3.invoke(c1.newInstance());} catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException | InstantiationException e) {    e.printStackTrace();}

通过反射操作私有属性

123456789101112131415
Class c1 = persen.getClass();try {    //通过属性名获得属性    Field name = c1.getDeclaredField("name");    //由于是私有属性,所以需要设置它可见    name.setAccessible(true);    //直接修改该对象的该属性的值    name.set(persen,"小明");    //获得该对象的该属性的值    return (String) name.get(persen);} catch (NoSuchFieldException e) {    e.printStackTrace();} catch (IllegalAccessException e) {    e.printStackTrace();}

奉上一个调用反射的帮助类

1234567891011121314151617181920
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!