什么是反射(Reflection)?它能做什么?
指程序可以访问、检测和修改本身的状态或行为的一种能力或特性。
反射(Reflection)机制是Java语言特性之一,是Java被视为动态(或准动态)语言的一个关键特性。
Java反射有以下3个动态特征:
- 运行时创建实例。
- 运行期间调用方法。
- 运行是更改属性。
JAVA机制反射是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
Java中编译类型有两种:
静态编译:在编译时确定类型,绑定对象即通过。
动态编译:运行时确定类型,绑定对象。动态编译最大限度地发挥了Java的灵活性,体现了多态的应用,可以降低类之间的耦合性。
通过Java反射可以实现以下功能:
- 在运行时探知任意一个实例所属的类。
- 在运行时构造任意一个类的实例。
- 在运行时探知任意一个类所具有的方法和属性。
- 在运行时调用任意一个实例的方法。
就像照镜子能够看清自己,可以看清一个类的情况并加以使用。并且,反射机制是构建框架技术的基础所在。
使用反射虽然会很大程度上提高代码的灵活性,但不能滥用反射,因为通过反射创建和访问实例时性能要稍低一些,且反射可能会破坏封装。实际上,只有当程序需要动态创建类的实例时才会考虑用反射。
什么是反射(Reflection)?它能做什么?相关推荐
- C#反射(Reflection)详解
1. 什么是反射 2. 命名空间与装配件的关系 3. 运行期得到类型信息有什么用 4. 如何使用反射获取类型 5. 如何根据类型来动态创建对象 6. 如何获取方法以及动态调用方法 7. 动态创建委托 ...
- CSharpGL(43)环境映射(Environment Mapping)-天空盒(Skybox)反射(Reflection)和折射(Refraction)...
CSharpGL(43)环境映射(Environment Mapping)-天空盒(Skybox)反射(Reflection)和折射(Refraction) 开始 如图所示,本文围绕GLSL里的sam ...
- 反射(reflection)基础
反射(reflection) 1. 一个需求引出反射 1.1 请看下面的问题 根据配置文件 re.properties 指定信息,创建Cat对象并调用方法hi 我们用之前的方式处理就是: 先创建一个C ...
- JavaSE——第23章 反射reflection
JavaSE--第23章 反射reflection(老师:韩顺平) 文章目录 JavaSE--第23章 反射reflection(老师:韩顺平) 23.2 反射机制 23.2.1 Java refle ...
- 什么是反射 (Reflection)?可以用它做什么?
一.什么是反射: (1)Java反射机制的核心是在程序运行时动态加载类并获取类的详细信息,从而操作类或对象的属性和方法.本质是JVM得到class对象之后,再通过class对象进行反编译,从而获取对象 ...
- 反射(Reflection)
能够分析类能力的程序称为反射. 检查类的结构(反射机制最重要的内容) 使用反射在运行时分析对象 使用反射编写泛型数组代码 调用任意方法与构造器 动态语言的关键,允许程序在执行期间借助 Reflecti ...
- Java中的反射(Reflection)为什么叫“反射”?什么是“正射”?如何自定义注解并解析?
文章目录 反射的定义 什么是"正射" 反射的作用 反射的定义 计算机科学中的反射(reflection) 指计算机程序在运行时(runtime) 可以访问.检测和修改它本身状态或行 ...
- java 反射深度克隆_C#使用反射(Reflection)实现深复制与浅复制
原文路径:https://blog.csdn.net/qq_28839293/article/details/79487294 1.浅复制: class Program { public static ...
- Java基础--反射Reflection
Reflection 反射能在运行时获取一个类的全部信息,并且可以调用类方法,修改类属性,创建类实例. 而在编译期间不用关心对象是谁 反射可用在动态代理,注解解释,和反射工厂等地方. -------- ...
- java 反射Reflection;Class类
1.反射机制概述 java能够反射的前提:已经加载过这个类 反射可以通过类名来寻找这个类的所有相关信息.类似于人类的记忆,事先在记忆中有了这个事物的信息,人就可以通过名字来在记忆中寻找事物的具体信息. ...
最新文章
- 【C】printf warning: unknown conversion type character ‘l‘ in format [-Wformat=]
- 迈吉客受邀参加《创意中国》, 85%超高支持率晋级年度盛典
- python判断值是否为空(亲测)
- java 字符串数组连接
- 数据结构-图-邻接矩阵-试在邻接矩阵存储结构上实现图的基本操作 matrix_insert_vertex 和matrix_insert_arc-icoding
- 众多SEO专家集体盛赞
- Python 中如何解决 asyncio 文件描述符最大数量限制问题
- 《HTML5 从入门到精通--7.6.3 单元格垂直跨度——rowspan》
- SpringMVC3 AnnotationMethodHandlerAdapter与mvc:annotation-driven冲突的解决方案
- JavaScript-包装类型
- python vue token_Haytham个人博客开发日志 -- Flask+Vue基于token的登录状态与路由管理...
- 【平面设计学习】Ai使用心得-扁平化制作
- 被关在寝室的某个下午
- Windows 常见文件扩展名解释
- RCWL-0516微波雷达模块检测人体移动(发光二极管)
- Apache Kudo: 1.0版和未来 [session]
- 惊闻高中同学因公殉职
- 碧桂园出品的机器人,能够代替公司人力吗?
- Vue01 | el-autocomplete远程搜索下拉框并实现自动填充
- python解包什么意思_python解包用法详解
热门文章
- Idea通过svn更新项目失败报 Node remains in conflict
- OceanBase 社区版 3.1.3 Docker镜像尝鲜,能错过?不存在的
- java StringBuilder用法,用逗号拼接字符串 zhaoqian,sunli,zhouwu
- Notion使用详解三Notion小传
- 创新工场5位创业者2011创业感悟
- 欣欣向荣的Ruby家族
- 什么是三层交换机-三层交换机的工作原理和作用
- 机房交换机网络测试软件,国内IDC机房带宽测试工具和方案
- Office Open XML 的测量单位
- sis最新ip地址2020入口一_2020云南高考成绩公布时间最新 云南高考查成绩方式入口大全...