文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java反射机制怎么理解

2023-06-03 14:42

关注

本篇内容主要讲解“Java反射机制怎么理解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java反射机制怎么理解”吧!

简介

定义:Java语言中 一种动态(运行时)访问、检测 & 修改它本身的能力

作用:动态(运行时)获取类的完整结构信息 & 调用对象的方法

类的结构信息包括:变量、方法等

正常情况下,Java类在编译前,就已经被加载到JVM中;而反射机制使得程序运行时还可以动态地去操作类的变量、方法等信息

特点

1 优点

灵活性高。因为反射属于动态编译,即只有到运行时才动态创建 &获取对象实例。

编译方式说明:

静态编译:在编译时确定类型 & 绑定对象。如常见的使用new关键字创建对象

动态编译:运行时确定类型 & 绑定对象。动态编译体现了Java的灵活性、多态特性 & 降低类之间的藕合性

2 缺点

执行效率低

因为反射的操作 主要通过JVM执行,所以时间成本会高于直接执行相同操作

因为接口的通用性,Java的invoke方法是传object和object[]数组的。基本类型参数需要装箱和拆箱,产生大量额外的对象和内存开销,频繁促发GC。

编译器难以对动态调用的代码提前做优化,比如方法内联。

反射需要按名检索类和方法,有一定的时间开销。

容易破坏类结构

因为反射操作饶过了源码,容易干扰类原有的内部逻辑

应用场景

动态获取类文件结构信息(如变量、方法等) & 调用对象的方法

常用的需求场景有:动态代理、工厂模式优化、Java JDBC数据库操作等

下文会用实际例子详细讲解

具体使用

1 Java反射机制提供的功能

Java反射机制怎么理解

2 实现手段

反射机制的实现 主要通过操作java.lang.Class类

下面将主要讲解 java.lang.Class 类

2.1 java.lang.Class 类

定义:java.lang.Class类是反射机制的基础

作用:存放着对应类型对象的 运行时信息

Java反射机制怎么理解

每种类型的Class对象只有1个 = 地址只有1个

Java反射机制怎么理解

Java反射机制的实现除了依靠Java.lang.Class类,还需要依靠:Constructor类、Field类、Method类,分别作用于类的各个组成部分:

Java反射机制怎么理解

3 使用步骤

在使用Java反射机制时,主要步骤包括:

获取 目标类型的Class对象

通过 Class 对象分别获取Constructor类对象、Method类对象 & Field 类对象

通过 Constructor类对象、Method类对象 & Field类对象分别获取类的构造函数、方法&属性的具体信息,并进行后续操作

下面,我将详细讲解每个步骤中的使用方法。

步骤1:获取 目标类型的Class对象

Java反射机制怎么理解

此处额外讲一下java.lang.reflect.Type类

java.lang.reflect.Type是 Java中所有类型的父接口

这些类型包括:

Java反射机制怎么理解

之间的关系如下

Java反射机制怎么理解

步骤2:通过 Class 对象分别获取Constructor类对象、Method类对象 & Field 类对象

Java反射机制怎么理解

Java反射机制怎么理解

步骤3:通过 Constructor类对象、Method类对象 & Field类对象分别获取类的构造函数、方法 & 属性的具体信息 & 进行操作

Java反射机制怎么理解

4 特别注意:访问权限问题

背景

反射机制的默认行为受限于Java的访问控制

如,无法访问( private )私有的方法、字段

冲突

Java安全机制只允许查看任意对象有哪些域,而不允许读它们的值

若强制读取,将抛出异常

解决方案

脱离Java程序中安全管理器的控制、屏蔽Java语言的访问检查,从而脱离访问控制

具体实现手段:使用Field类、Method类 & Constructor类对象的setAccessible()

Java反射机制怎么理解

到此,相信大家对“Java反射机制怎么理解”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯