Java反射机制

本文介绍了Java反射机制,对比了动态语言与静态语言的区别,详细讲解了Java反射提供的功能,包括构造对象、访问成员变量和方法等,并阐述了反射的主要API如Class、Method、Field和Constructor。此外,还讨论了Class类及其在Java类加载过程中的角色,以及如何获取和使用Class对象。最后,总结了反射的优缺点,强调了反射在提高可扩展性和辅助开发工具方面的价值,同时指出其可能带来的性能损失和安全性问题。
摘要由CSDN通过智能技术生成


Reflection(反射)是被视为 动态语言的关键,反射机制允许程序在 执行期借助于Reflection API 取得任何类的内部信息,并能直接操作任意对象的内部属性及方法
加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象(一个类只有一个Class对象), 这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构。这个对象就像一面镜子,透过这个镜子看到类的结构,所以,我们形象的称之为: 反射
在这里插入图片描述
注:编译的时候不能确定造什么对象,运行的时候才能确定

补充:动态语言 vs 静态语言

1、动态语言
是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。通俗点说就是 在运行时代码可以根据某些条件改变自身结构。
主要动态语言:Object-C、C#、JavaScript、PHP、Python、Erlang。
2 、静态语言
与动态语言相对应的,运行时结构不可变的语言就是静态语言。如Java、C、C++。

Java不是动态语言,但Java可以称之为“准动态语言”。即Java有一定的动态性,我们可以利用反射机制、字节码操作获得类似动态语言的特性。Java的动态性让编程的时候更加灵活

Java 反射机制提供的功能

在运行时判断任意一个对象所属的类
在运行时构造任意一个类的对象
在运行时判断任意一个类所具有的成员变量和方法
在运行时获取泛型信息
在运行时调用任意一个对象的成员变量和方法
在运行时处理注解
生成动态代理

反射相关的主要API

java.lang.Class: 代表一 个 类
java.lang.reflect.Method: 代表类 的 方法:使用 get() 和 set() 方法读取和修改 Field 对象关联的字段
java.lang.reflect.Field: 代表类的 成员 变量:使用 invoke() 方法调用与 Method 对象关联的方法;
java.lang.reflect.Constructor: 代表类 的 构造 器:用 Constructor 创建新的对象

Class 类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值