**前戏:**反射都需要用到.class字节码文件,获得.class字节码文件的方法:
1、对象.getClass();
2、通过反射得到:
1、类名.class;(开发中少用)
2、Class.forName(“包名.类名”);
1、获取构造方法:
1、得到所有构造方法(包括公有、私有),返回的是一个数组:
类变量.getDeclaredConstructors();
2、得到所有公有的构造方法:
类变量.getConstrustors();
3、得到一个公有的构造方法,并且使其被调用:
1、类变量.getConstrustor();
2、得到一个对象,利用构造方法的变量.newInstance()
3、输出这个对象即可。
4、得到一个私有的构造方法,并使其被调用:
1、类变量.getDeclaredConstructor(int.class);//这里如果调用有参方法就放对应参数即可
2、暴力反射,利用构造方法的变量.setAccessible(true);
3、得到一个对象,利用构造方法的变量.newInstance(12);//参数里放对应的具体值
4、输出这个对象即可。
2、获取属性:
1、得到所有属性:
类变量.getDeclaredFeilds();
2、得到所有公有属性:
类变量.getFeilds();
3、得到单个公有的属性:
1、类变量.getFeild(“name”);//参数放属性的名字
2、得到对象:类变量.getConstructor().newInstance();
3、属性对象.set(obj,"");//第一个是你用反射得到的obj对象,第二个是你要赋的值
4、直接输出对象;//前提是你的entity类已经重写toString方法
3、获取方法:
1、得到所有方法:
类变量.getDeclaredMethods();
2、得到所有公有的方法:
类变量.getMethods();
3、得到单个公有的、无参的方法,并调用:
1、类变量.geMethod(“方法名”);
2、得到对象,通过类变量.getConstrustor().newInstance();
3、用方法变量.invoke(对象);
4、调用单个私有的、有参的方法,并调用:
1、类变量.getMethod(“方法名”,参数类型.class);
2、去掉权限 方法变量.setAccessible(true);
2、得到对象,类变量.getConstrustor().newInstance();
3、类变量.invoke(对象,“传入参数的值”);
4、利用反射忽略泛型的定义:
1、确定泛型是String类型
2、得到list的.class文件:
list.getClass();
3、得到Method对象:
类变量.geMethod(“add”,Object.class);
4、接着就可以添加int类型的值了。
5、关键点:
1、必须使用forEach循环输出,而且类型该为Object。
反射之获取属性、构造方法、成员方法:
最新推荐文章于 2021-09-28 09:39:47 发布