Java——反射详解

2023-11-01

目录

一、概念

二、功能

三、反射相关的重要的类

3.1 class类

3.2 获取class类的方法

3.3 class类中的方法

3.4 Field类方法

 3.5 打破封装

一、概念

反射库(reflection library)提供了一个非常丰富且精心设计的工具集,以便编写能够动态操纵Java代码的程序。这项功能被大量地应用于JavaBeans中,它是Java组件的体系结构。使用反射,Java可以支持Visual Basic用户习惯使用的工具。特别是在设计或运行中添加新类时,能够快速地应用开发工具动态地查询新添加类的能力。能够分析类能力的程序称为反射(reflective)。

二、功能

反射机制的功能极其强大,在下面可以看到,反射机制可以用来:

● 在运行时分析类的能力。

● 在运行时查看对象,例如,编写一个toString方法供所有类使用。

● 实现通用的数组操作代码。

● 利用Method对象,这个对象很像C++中的函数指针。

注意:反射是一种功能强大且复杂的机制。使用它的主要人员是工具构造者,而不是应用程序员。

三、反射相关的重要的类

 注意:必须先获得Class才能获取Method、Constructor、Field

3.1 class类

在程序运行期间,Java运行时系统始终为所有的对象维护一个被称为运行时的类型标识。这个信息跟踪着每个对象所属的类。虚拟机利用运行时类型信息选择相应的方法执行。然而,可以通过专门的Java类访问这些信息。保存这些信息的类被称为Class。

3.2 获取class类的方法

Object类中的getClass( )方法将会返回一个Class类型的实例。

调用静态方法forName获得类名对应的Class对象

注意:如果类名保存在字符串中,并可在运行中改变,就可以使用这个方法。当然,这个方法只有在className是类名或接口名时才能够执行。否则,forName方法将抛出一个checked exception(已检查异常)。无论何时使用这个方法,都应该提供一个异常处理器(exception handler)。

获得Class类对象的第三种方法非常简单。如果T是任意的Java类型(或void关键字), T.class将代表匹配的类对象。

注:以上三种方式返回值都是Class类型。

3.3 class类中的方法

通过反射实例化对象
对象.newInstance()
注:newInstance()方法内部实际上调用了无参数构造方法,必须保证无参构造存在才可以。
否则会抛出java.lang.InstantiationException异常。

3.4 Field类方法

 3.5 打破封装

set()可以访问私有属性时,需要打破封装,才可以访问

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java——反射详解 的相关文章

随机推荐

  • 负载均衡分类及选择(lvs/nginx/haproxy/keepalived)

    lvs官网 http www linuxvirtualserver org haproxy官网 https www haproxy org https www haproxy com nginx官网 https nginx org keep
  • 兼容性测试的测试点

    兼容性测试的测试点 1 测试软件是否能在不同的操作系统平台上兼容 或测试软件是否能在同一操作平台的不同版本上兼容 2 软件本身能否向前或向后兼容 主要指的是能否兼容不同版本的数据 3 测试软件能否与其他相关的软件兼容 例如杀毒软件 文字处理
  • Kotlin尾递归优化

    一 尾递归优化 1 递归的一种特殊形式 2 调用自身后无其他的操作 3 tailrec关键字提示编译器尾递归优化 二 具体的来看看一下代码说明 package net println kotlin chapter5 tailrecursiv
  • Spring Cloud 5分钟搭建教程

    1 前言 1 1 以下内容是我通过阅读官方文档 并成功实践后的经验总结 希望能帮助你更快地理解和使用springCloud 1 2 默认读者已经熟练掌握Spring 全家桶 Spring Boot和注解开发 1 3 陆续更新 2 开发环境
  • Django连接mysql数据库的步骤以及可能出现的一系列错误

    1 首先要更改settings下的DATABASES DATABASES default ENGINE django db backends mysql NAME books 你的数据库名称 USER root 你的数据库用户名 PASSW
  • ztree添加自定义图标

    ztree默认自带的是编辑和删除的图标 但是在做项目的时候遇到需要 添加 的图标 百度好久找到了解决方法 如下
  • CSS---CSS面试题

    目录 1 盒模型 2 offsetHeight clientheight scrollHeight 3 left与offsetLeft 4 对BFC规范的理解 5 解决元素浮动导致的父元素高度塌陷的问题 6 CSS样式的先级 7 隐藏页面元
  • Uuntn操作系统学习笔记之服务-web相关

    web服务 web服务是我们日常生活中使用的最多的服务 如 所有的网站 BS架构 Browser Server 客户端 IE Chrome Safari Firefox Opera 命令行浏览器 服务端 IIS Apache Nginx L
  • 51c语言延时作用,51单片机C语言延时函数怎么定义和使用

    描述 51单片机C语言延时函数怎么定义 C语言定义延时函数主要通过无意义指令的执行来达到延时的目的 C程序中可使用不同类型的变量来进行延时设计 经实验测试 使用unsigned char类型具有比unsigned int更优化的代码 在使用
  • Spring之@Autowired、@Resource、@Inject和@Configuration

    Spring IOC有个重要的功能叫做DI 依赖注入 依赖注入我们都知道是通过 Autowired Resource Inject等方式来实现 在一个Bean中通过 Autowired来控制对另一个Bean的依赖 通常我们大部分使用的是 A
  • SQLite错误码

    objc view plain copy define SQLITE OK 0 成功 Successful result 错误码开始 define SQLITE ERROR 1 SQL错误 或 丢失数据库 SQL error or miss
  • QT creator使用(五):应用程序主窗口QMainWindow

    目录 5 0 本章简介 5 1 主窗口框架 5 1 1 Qt资源系统 菜单栏和工具栏 5 1 2 中心部件 5 1 3 Dock部件 5 1 4 状态栏 5 1 5 自定义菜单 5 2 富文本处理 5 2 1 富文本文档结构 5 2 2 文
  • 插槽

    一 插槽 插槽就是子组件中的提供给父组件使用的一个占位符 用
  • 基于Hadoop/Hive的足球数据可视化系统实现

    基于Hadoop Hive的足球数据可视化系统实现 可视化技术 Html CSS AJAX JavaScript 大屏部分展示 后端技术 Java SpringBoot JDBC 部署中间件 Hadoop Hive MySQL 部署方式 1
  • Java中后端Bigdecimal传值到前端精度丢失问题

    有两种方式解决方式 1 将接收数据库数据的字段用string方式接收 2 JsonSerialize using ToStringSerializer class 将此注解加在Bigdecimal类型的字段上 这样前端就会将此类型的数据看成
  • logistic回归分析优点_7种主流数据分析软件比较及经典教材推荐

    今天给大家推荐几款学习计量以及统计软件的书籍 一方面可以提高自身的技能 另一方面在写论文的时候也可以使用到 提高论文的硬实力 当然多掌握一门技能也可能更多的增强自身在未来就业中的竞争力 所以小伙伴们可以择优选择 放入自己的购物车中 STAT
  • 【Docker】Docker 一个偶现的错误 bash命令突然找不到

    1 背景 一次偶然在服务器上操作 发现提交命令运行jar无法运行了 1 界面点击 2 后台执行shell 脚本 3 脚本执行java jar 结果发现无法运行 后阿里发现是 ll bin bash 这个系统级别的文件找不到了 我是拷贝其他服
  • <问题解决05>导入的新项目报org.apache.catalina不存在--解决方案如下:

    问题描述 导入新的web项目到eclipse上 报The import org apache catalina cannot be resolved 解决方案 解决方案来源博客地址 http blog chinaunix net uid 2
  • sql的coalesce()函数的用法

    用途 将空值替换成其他值 返回第一个非空值 表达式 COALESCE是一个函数 expression 1 expression 2 expression n 依次参考各参数表达式 遇到非null值即停止并返回该值 如果所有的表达式都是空值
  • Java——反射详解

    目录 一 概念 二 功能 三 反射相关的重要的类 3 1 class类 3 2 获取class类的方法 3 3 class类中的方法 3 4 Field类方法 3 5 打破封装 一 概念 反射库 reflection library 提供了