Java之反射
来源:互联网 发布:21端口是tcp 编辑:程序博客网 时间:2024/06/14 23:25
反射就是把Java类中的各种成分映射成一个个的java对象。
1.Java反射常用类
Class类—可获取类和类的成员信息 Field类—可访问类的属性 Method类—可调用类的方法 Constructor类—可调用类的构造方法
2.如何使用反射
1.导入java.lang.reflect.* 2.获得需要操作的类的Java.lang.Class对象 3.调用Class的方法获取Field、Method等对象 4.使用反射API进行操作 (设置属性﹑调用方法)
3.Class类
1)Class类是Java 反射机制的起源和入口
每个类都有自己的Class 对象且每一个类只有一个class 对象用于获取与类相关的各种信息提供了获取类信息的相关方法Class类继承自Object类
2)Class类存放类的结构信息
3)【类对象】获取类的Class 对象
方法1:对象.getClass() Person person = new Person();Class class2 = person.getClass();方法2:类.class Class class1 = Person.class;方法3:Class.forName() Class class3 = Class.forName("com.qf.demo.Person"); 使用forname方法,参数为相对于本工程的Person类文件路径
4)【属性】获取Field 对象
【只能获取public的属性】Field[] fields = class1.getFields();【获取所有属性】Field[] fields2 = class1.getDeclaredFields();
public属性
【得到指定的属性对象】Field field = class1.getField("age"); 【 给属性赋值】field.set(object, 5); 【得到属性值,返回的是对象】Object object2 = field.get(object);
静态属性
【获取属性对象】Field field2 = class1.getDeclaredField("weight"); 【属性赋值】field2.set(null, 10); 【获取属性值】Object object3 = field2.get(null);
私有属性
Field field3 = class1.getDeclaredField("name"); 【设置权限】field3.setAccessible(true); field3.set(object, "小花"); Object object4 = field3.get(object);
5)【方法】获取Method 对象
--Method[] methods = class1.getMethods();// 得到【本类和父类】的【非私有】的方法--Method[] methods2 = class1.getDeclaredMethods();// 得到【本类】中声明的所有的方法【包括私有】--【得到无参无返回值方法】Method method = class1.getMethod("eat", null);【方法调用】method.invoke(object, null);// 参数1:对象;参数2:方法参数--【得到有参无返回值方法】Method method2 = class1.getMethod("drink", String.class);【方法调用】method2.invoke(object, "水");--【得到无参有返回值方法】Method method3 = class1.getMethod("sleep", null);【调用】Object object2 = method3.invoke(object, null);//返回值都是用对象接收--【静态方法】Method method4 = class1.getMethod("hehe", null);【调用,不需要传对象】method4.invoke(null, null); --【私有方法】Method method5 = class1.getDeclaredMethod("play", null);【必须设置访问权限】method5.setAccessible(true);// 私有方法默认没有权限调用,必须单独设定调用权限【调用】method5.invoke(object, null);
6)【构造方法】获取Constructor对象
【获取所有构造方法】Constructor[] constructors = class1.getConstructors();【得到无参的构造方法】Constructor constructor = class1.getConstructor(null);【创建对象】Person person = (Person) constructor.newInstance(null);【得到有参的构造方法】Constructor constructor2 = class1.getConstructor(String.class,int.class,int.class);【创建对象】Person person2 = (Person) constructor2.newInstance("张三",5,9);
4.反射优缺点
优点
1 提高了Java程序的灵活性和扩展性,降低了耦合性,提高自适应能力 2 允许程序创建和控制任何类的对象,无需提前硬编码目标类
缺点
性能问题 代码维护问题 可以使用私有的属性和方法,破坏了代码块的安全性
0 0
- JAVA 之"反射"
- Java 之反射机制
- Java高新技术之反射
- java 高新技术之反射
- Java反射之初识
- java高新技术之反射
- java基础之 反射
- java基础之反射
- Java之反射
- Java高新技术之反射
- 致java之反射
- java之反射
- java之反射机制
- JAVA基础之反射
- Java高级之反射
- Java之反射篇
- java之反射
- java之反射-注解
- 刷leetcode过程中记录难度题,自己做法及最优做法
- Supermap-打开数据源失败
- dao模式总结
- 设计模式之---访问者模式
- 关于llvm kaleidoscope: 记一次Debug血泪之路
- Java之反射
- idea中修改某个jsp文件的编码方式
- matplotlib的基本用法(十五)——主次坐标轴
- Java8新特性之Lambda表达式(2)
- 关于购物的简单安卓应用
- 持久化
- Java中的接口和抽象类的区别联系
- opencv3:AttributeError: 'module' object has no attribute 'CV_LOAD_IMAGE_COLOR'
- CCF NOI1170 质因数分解