网站首页 > 资源文章 正文
Java反射的概念
百度百科对Java反射的定义:JAVA反射机制是在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。
举一个我使用到反射的例子:有一个类,它内部用一个private方法获取到了原始信息,然后在对外public方法中将数据过滤返回。我现在想拿到原始数据,通过普通途径是拿不到的,这时候就可以通过反射实现。
Java反射涉及到4个类和一个接口。四个类是Class类、Field类、Method类、Constructor类(后面三个类都属于Java 反射类库java.lang.reflect),一个接口是Member接口。
- Class类:实现反射功能是通过下面三个类和一个接口的。那么为什么需要Class类呢?第一,JVM创建对象之前必须加载该类的Class对象。第二,看源码可以发现,下面三个类是没有public构造器的,也就是说下面三个类的对象只能通过Class类来获取。
- Constructor类:实现了Member接口。该类针对构造器。主要提供创建对象的功能。
- Field类:实现了Member接口。该类针对属性。该类提供了获取属性的类型、修饰符、注解、变量名、值以及修改属性值的功能(包括private属性)
- Method类:实现了Member接口。该类针对方法。该类提供了获取方法返回类型、方法参数类型、方法参数名称、方法抛出异常类型、方法修饰符,以及通过反射调用方法等功能。
- Member接口:该类提供了一个方法AccessibleObject。所以实现类的对象都可以使用该方法取消 Java 语言访问权限检查。
一般使用反射,代码步骤就是:
- 获取目标类的Class对象
- 通过Class对象获取Field对象或者Method对象或者Constructor对象
- 使用Field对象或者Method对象或者Constructor对象调用实现的Member接口的AccessibleObject方法去交访问权限检查
- Field对象或者Method对象或者Constructor对象进行反射操作
For Example
有这样一个类,可以看到其构造器、属性和方法都是私有的(toString方法是一会儿用来验证的),普通的手段是无法使用这个类的。
现在通过反射来使用这个类:
最后看一下运行结果:
接口整理
看了上面的例子应该对Java反射有了整体的理解。但上面的例子仍旧太简单了,因为Java反射还提供了很多其他的接口可供调用。
获取Class对象
上面例子中是一种获取Class对象的方式,获取Class对象的方式有很多种:
Constructor对象
Class提供4种获取Constructor对象的方法。
//获取指定的构造器(任何访问类型的构造器、注意是可变参数) Class.getDeclaredConstructor(Class<?>... parameterTypes); //获取指定的public构造器(注意是可变参数) Class.getConstructor(Class<?>... parameterTypes); //获取所有构造器(任何访问类型的构造器),返回Constructor数组 Class.getDeclaredConstructors(); //获取所有public构造器,返回Constructor数组 Class.getConstructors();
Field对象
Class提供4种获取Field对象的方法。
和获取Constructor对象类似。
现在再看看上面写的:
Field类:实现了Member接口。该类针对属性。该类提供了获取属性的类型、修饰符、注解、变量名、值以及修改属性值的功能(包括private属性)
例子种修改属性值是通过set方法实现的。其他提到的这些功能,Field都有相应的方法可供调用。只需简单查询接口文档即可。
获取Method对象
Class提供4种获取Method对象的方法。
和获取Constructor对象类似。
Method类:实现了Member接口。该类针对方法。该类提供了获取方法返回类型、方法参数类型、方法参数名称、方法抛出异常类型、方法修饰符,以及通过反射调用方法等功能。
例子中通过反射调用方法使用的是invoke()方法。其他提到的功能,Method都有相应的方法可供调用。只需要简单的查询接口文档即可。
其他文章
猜你喜欢
- 2024-09-23 阿里P8技术心得:java反射机制的核心原理
- 2024-09-23 Java基础:反射机制,你用得多吗(java反射机制原理详解)
- 2024-09-23 java反射机制详解(java中的反射机制)
- 2024-09-23 「每日分享」深入理解Java类型信息(Class对象)与反射机制
- 2024-09-23 Java:反射功能和API简介、4个反射方法的代码实战、反射的优劣势
- 2024-09-23 大佬,到底什么是Java的反射?(java反射的主要作用)
- 2024-09-23 Java反射的理解(java反射的意义在什么地方)
- 2024-09-23 你真的了解java反射机制吗?看看阿里大牛是怎么看反射的,细致
- 2024-09-23 0202年了,还有人不懂Java反射机制?
- 2024-09-23 Java反射(小白也能懂)(java反射如何通俗易懂理解)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- 电脑显示器花屏 (79)
- 403 forbidden (65)
- linux怎么查看系统版本 (54)
- 补码运算 (63)
- 缓存服务器 (61)
- 定时重启 (59)
- plsql developer (73)
- 对话框打开时命令无法执行 (61)
- excel数据透视表 (72)
- oracle认证 (56)
- 网页不能复制 (84)
- photoshop外挂滤镜 (58)
- 网页无法复制粘贴 (55)
- vmware workstation 7 1 3 (78)
- jdk 64位下载 (65)
- phpstudy 2013 (66)
- 卡通形象生成 (55)
- psd模板免费下载 (67)
- shift (58)
- localhost打不开 (58)
- 检测代理服务器设置 (55)
- frequency (66)
- indesign教程 (55)
- 运行命令大全 (61)
- ping exe (64)
本文暂时没有评论,来添加一个吧(●'◡'●)