网站首页 > 资源文章 正文
1. Java反射的概念和提供的功能
(1)概念
在Java运行时的环境中,动态获取类的信息以及动态调用对象的方法的功能叫反射机制(Reflection)
(2)反射提供的功能
1)在运行时判断任意一个对象所属的类
2)在运行时构造任意一个类的对象
3)在运行时判断任意一个类所具有的成员变量和方法
4)在运行时调用任意一个对象的方法
2. Java反射实现层面提供的API
(1)Java反射提供的类所在的包是:
java.lang.reflect
(2) 具体的类包括如下:
Class类:代表一个类(注意:Class类位于java.lang包下);
Field类:代表类的成员变量;
Method类:代表类的方法;
Constructor类:代表类的构造方法;
Array类:提供了动态创建数组,以及访问数组的元素的静态方法。
3. 三种方法获取Class对象
(1)方法一:Class类提供的静态方法:forName(String className),其中参数className表示包括包路径的完整类名
(2)方法二:利用类名.class这个方式
(3)方法三:利用Object类提供的方法:getClass()
(4)以上三种方法的代码实例如下:
4. 获取成员变量对应的Field对象
Class类提供的获取类的成员变量对应的Field对象的方法如下:
1)Field getDeclaredField(String name):根据传入的变量名称返回此Class对象所表示的类或接口中声明的变量对应的Field对象。
2)Field[] getDeclaredFields():返回一个Field类型的数组,包含此Class对象所表示的类或接口中声明的所有变量的Field对象。
3)Field getField(String name):根据传入的变量名返回一个Field对象,注意与getDeclaredField(String name)不同的是,此方法返回的是public变量对应的Field对象。
4)Field[] getFields():返回一个Field类型的数组,注意与Field[] getDeclaredFields()方法不同的是,此方法返回的是所有public变量对应的Field对象。
代码实例如下:
输出结果是:
------获取Boolean类中声明的所有成员变量的Field对象的数组--------
public static final java.lang.Boolean java.lang.Boolean.TRUE
public static final java.lang.Boolean java.lang.Boolean.FALSE
public static final java.lang.Class java.lang.Boolean.TYPE
private final boolean java.lang.Boolean.value
private static final long java.lang.Boolean.serialVersionUID
-------获得Boolean类中声明的public成员变量的Field对象的数组---------
public static final java.lang.Boolean java.lang.Boolean.TRUE
public static final java.lang.Boolean java.lang.Boolean.FALSE
public static final java.lang.Class java.lang.Boolean.TYPE
5. 利用反射获取类对应的Method对象
Class类提供了以下方法来获取类中的方法对应的Method对象:
1)Method getDeclaredMethod(String name, Class<?>... parameterTypes):返回一个Method对象,参数name表示方法名,可变参数parameterTypes是一个Class对象的数组,代表方法的参数的Class类型;
2)Method[] getDeclaredMethods():返回Method对象的一个数组,这些对象反映此Class对象所表示的类或接口声明的所有方法,包括公共、保护、默认访问和私有方法,但不包括继承的方法;
3)Method getMethod(String name, Class<?>... parameterTypes):返回一个Method对象,注意和此Method对象对应的方法是公共(public)方法;
4)Method[] getMethods():返回一个Method数组,这些对象反映此Class对象所表示的类或接口中声明的公共(public)方法(也包括父类或父接口中声明的public方法)。
代码实例如下:
6. 利用反射机制调用自定义的对象的方法
Java反射机制可以在运行时动态调用类中的方法。具体步骤包括:
1)首先要创建一个对象,通过类的Class对象来创建它所代表的类的实例
2)通过Class对象我们还能获得类中声明的方法的Method对象
3)Method类提供了Invoke方法来调用此Method对象所表示的方法
代码实例如下:
输出结果是:
计算得到的结果是: 3.3
打印出来的信息是:additionnal info: beautiful
7. 反射的优劣势
反射机制是一种程序自我分析的能力。用于获取一个类的类变量,构造函数,方法,修饰符。但是它的优劣势如下:
优点:运行期类型的判断,动态类加载,动态代理使用反射。
缺点:性能是一个问题,反射相当于一系列解释操作,通知jvm要做的事情,性能比直接的java代码要慢很多。
此头条号每天都会分享非常实用的技术文章和笔试题讲解,欢迎大家关注此头条号!
猜你喜欢
- 2024-09-23 阿里P8技术心得:java反射机制的核心原理
- 2024-09-23 Java基础:反射机制,你用得多吗(java反射机制原理详解)
- 2024-09-23 java反射机制详解(java中的反射机制)
- 2024-09-23 「每日分享」深入理解Java类型信息(Class对象)与反射机制
- 2024-09-23 大佬,到底什么是Java的反射?(java反射的主要作用)
- 2024-09-23 Java反射的理解(java反射的意义在什么地方)
- 2024-09-23 你真的了解java反射机制吗?看看阿里大牛是怎么看反射的,细致
- 2024-09-23 0202年了,还有人不懂Java反射机制?
- 2024-09-23 Java反射(小白也能懂)(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)
本文暂时没有评论,来添加一个吧(●'◡'●)