java反射笔记
来源:互联网 发布:怎么在淘宝当客服 编辑:程序博客网 时间:2024/06/13 02:10
反射有什么用?
反射可以在只知道类名的情况下,获取类的所有属性和方法
反射通常和泛型一起使用
使用反射和泛型,可以增强程序的扩展性
反射中常用的方法
1.通过字符串 , 获取类对象
Class clazz = Class.forName("字符串");
这里的字符串要求是 类名,并且是完整的类名
eg : 有一个在com.nicetry.demo包下有一个 Student类
则类名为 com.nicetry.demo.Student
// 这里可以得到一个类对象// 类名需要带上包名 com.nicetry.demo.Student// 返回一个类对象Class clazz = Class.forName("类名");
2.根据类对象,创建该类的对象
类对象.newInstance();
// 这里clazz是一个类对象Object obj = clazz.newInstance();
3. 根据类对象获取属性对象
Field field = 类对象.getField("属性名"); 这是第一种方法
Field field = 类对象.getDeclaredField("属性名"); 这是第二种方法
List list = 类对象.getDeclaredFields(); 这是第三种方法,返回的是一个集合,集合里面是所有的属性对象
// 根据类对象获取了name的属性对象Field field =clazz.getField("name");// 根据类对象获取属性对象的第二种方法,通过这种方法获取的属性对象,可以修改private修饰的属性的值Field filed = clazz.getDeclaredField("name")// 根据类对象,获取了类的所有属性对象,返回一个list集合List fields = clazz.getDeclaredFileds();
4.根据类对象获取方法对象
第一种方法:
Method method = 类对象.getMethod("方法名",参数的类型); 这里的参数类型也是一个类对象,这里的参数,有多少写多少就好.
第二种方法:
Method method = 类对象.getDeclareMethod("方法名",参数的类型);
第三种方法,返回一个方法对象的集合
List methods = 类对象. getDeclareMethods();
// 获取了xxx的方法对象,这里的Object.class...代表这个一个类对象,类型是ObjMethod method = clazz.getMethod("xxx",Object.class)// 同上Method method = clazz.getDeclaredMethod("xxx",Obj.class)// 获取所有方法对象,返回一个listList methods =clazz.getDeclaredMethods();
5. 通过属性对象给属性赋值
属性对象.set(类名,属性值);
如果属性是private修饰的,则需要先打破私有权限
属性对象.setAccessible(true); 这一语句可以打破私有权限
Field name = clazz.getDeclaredField("name");name.setAccessible(true);name.set(obj,"张三"); //obj代表任意类型
6. 通过方法对象调用方法
方法对象.invike(类名,需要传入的参数);
同样,当方法是私有的时候,需要先打破私有权限
方法对象.setAccessible(true);
Method method= clazz.getDeclaredField("show",String.class);method.setAccessible(true);method.invike(obj,"aaa");// 相当于 obj.method("aaa");
- Java笔记----java反射
- Java反射笔记1
- Java笔记---反射
- Java反射笔记一
- java反射笔记二
- java反射笔记三
- java反射笔记四
- java反射笔记五
- java笔记(5)--反射
- Java反射机制 笔记
- java反射机制笔记
- Java 反射学习笔记
- java笔记-高新技术-反射
- Java反射学习笔记
- java反射学习笔记
- Java反射学习笔记
- java反射扫盲笔记
- java 反射笔记
- Java知识点复习系列(3)
- A12_获取与清空委托列表|匿名委托|Lambda表达式
- 【Scikit-Learn 中文文档】Pipeline(管道)和 FeatureUnion(特征联合): 合并的评估器
- Docker入门学习(2)----Docker安装和第一个hello-world
- RMQ(ST算法)
- java反射笔记
- 通过影响函数理解黑箱预测
- HUAT电气系CAD电机正反转接线课设概述
- 【Scikit-Learn 中文文档】预处理数据
- JDBC | 4
- 【Scikit-Learn 中文文档】无监督降维
- display:flex 布局教程
- 集体智慧编程第二章
- 【Scikit-Learn 中文文档】随机投影