Java虚拟机反射机制

1 什么是Java虚拟机反射机制?

  • 虚拟机在运行期间,对于任何一个类,我们都能知道其内部信息,包括属性,方法,构造函数,实现接口;对于任何一个对象,我们都能获取其字段值、调用其内部方法。这就是Java虚拟机反射机制。

2 怎么知道其内部信息,包括属性,方法,构造函数?

// 获取类对象
Class<?> clazz = MyClass.class;
Class<?> clazz = MyObject.getClass();
Class<?> clazz = Class.forName(String str)
// 获取类名
String className = clazz.getName();
// 获取父类
Class<?> superClass = clazz.getSuperclass();
// 获取实现的接口
Class<?>[] interfaces = clazz.getInterfaces();
// 获取构造函数
Constructor<?>[] constructors = clazz.getConstructors();
// 获取方法
Method[] methods = clazz.getMethods();
// 获取字段
Field[] fields = clazz.getDeclaredFields();

3 对于任何一个对象,我们怎么能获取其字段值、调用其内部方法?

//获取其字段值
Class<?> clazz = MyClass.class;
Object instance = clazz.newInstance();
Field field = clazz.getDeclaredField("fieldName");
field.setAccessible(true); // 如果字段是私有的,需要设置为可访问
Object value = field.get(instance);
field.set(instance, newValue);
//调用其内部方法
Class<?> clazz = MyClass.class;
Object instance = clazz.newInstance();
Method method = clazz.getMethod("methodName", parameterType1, parameterType2);
Object result = method.invoke(instance, arg1, arg2);

4 Java虚拟机反射机制应用?

  • 主要作用是为了实现解耦,让应用编程得以像积木那样搭建。
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;// Shape 接口
public interface Shape {void draw();
}// Circle 类
public class Circle implements Shape {@Overridepublic void draw() {System.out.println("Drawing a circle");}
}// Rectangle 类
public class Rectangle implements Shape {@Overridepublic void draw() {System.out.println("Drawing a rectangle");}
}public class ShapeFactory {public static Shape createShape(String shapeType) {try {// 使用反射获取类对象Class<?> clazz = Class.forName("com.example." + shapeType); // 假设类在com.example包下// 获取类的构造函数Constructor<?> constructor = clazz.getConstructor();// 使用构造函数创建对象Object shapeObject = constructor.newInstance();// 将对象强制转换为Shape接口类型if (shapeObject instanceof Shape) {return (Shape) shapeObject;} else {throw new IllegalArgumentException("Invalid shape type");}} catch (ClassNotFoundException | NoSuchMethodException | InstantiationException |IllegalAccessException | InvocationTargetException e) {e.printStackTrace();return null;}}public static void main(String[] args) {String userInput = "Circle"; // 用户输入的形状类型Shape shape = createShape(userInput);if (shape != null) {shape.draw(); // 调用draw方法}}
}

5 动态代理中反射是怎么应用的?

在这里插入图片描述

  • 动态代理流程:代理类会将接口对象的方法和方法参数通过反射得到,并传递给 InvocationHandler 对象,InvocationHandler 对象,InvocationHandler 对象会聚合被代理对象,并再 invoke 方法中,调用 method.invoke(target, args),实现 被代理对象 方法的调用。

参考文献:
Java虚拟机反射机制详解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/73001.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ using的多种用法

1、引入命名空间 using namespace std; using std::cout; 2、引入基类成员 class Base{ public:void func(){cout << "Base::func()" << endl;} }; class Derived : public Base{ public:using Base::func;void func(int x){cout << "Deriv…

Git 客户端基本使用及新手常见问题

Git作为一个版本管理工具&#xff0c;在企业中的应用越来越普遍。作为一个测试工程师&#xff0c;不可避免会需要接触到Git的相关操作&#xff0c;以下整理Git客户端的常见操作&#xff0c;以及应用中新手常碰到的一些问题。 1、环境安装及配置 Git下载地址&#xff1a;https…

网络安全的规划

防火墙被应用于内部网与外部网的连接之间&#xff0c;通过2~6 块 100M 快速以太网 卡直接连在——交换机上。使用虚拟网&#xff08;VLAN&#xff09;技术&#xff0c;来自 INTERNET 对内部网 12 的访问首先要经过防火墙&#xff0c;防火墙对进出内部网的数据内容进行各个层次…

nginx报错file not found解决

文章目录 一、nginx配置文件修改1.1 配置文件位置1.2 php fastcgi配置1.3 测试 二、nginxphp运行原理三、外网访问内网设置 采用nginxphp作为webserver的架构模式&#xff0c;在现如今运用相当广泛。然而第一步需要实现的是如何让nginx正确的调用php。由于nginx调用php并不是如…

软考高级系统架构设计师系列案例考点专题五:Web应用开发

软考高级系统架构设计师系列案例考点专题五:Web应用开发 一、Web应用技术分类二、数据库与Web服务器三、应用服务器集群四、负载均衡技术1.应用层负载均衡技术2.传输层负载均衡技术五、数据库读写分离化六、用缓存缓解库读取压力七、有状态和无状态八、内容分发网络九、表述性…

手敲Cocos简易地图编辑器:人生地图是一本不断修改的书,每一次编辑都是为了克服新的阻挡

引言 本系列是《8年主程手把手打造Cocos独立游戏开发框架》&#xff0c;欢迎大家关注分享收藏订阅。 在上一篇文章&#xff0c;笔者给大家讲解了在Cocos独立游戏开发框架中&#xff0c;如何自定义实现Tile地图管理器&#xff0c;成功地在游戏中优化加载一张特大的地图。接下来…

springboot~静态资源配置

springboot~静态资源配置 springboot的静态资源默认路径给静态资源请求加前缀指定静态资源加载的包欢迎页 springboot的静态资源默认路径 请求效果见图 给静态资源请求加前缀 有时需要用拦截器对某些请求进行拦截后再处理相关的业务代码&#xff0c;此时我们就要对请求进行…

腾讯云PK阿里云2核2G云服务器租用价格表

2核2G云服务器可以选择阿里云服务器或腾讯云服务器&#xff0c;腾讯云轻量2核2G3M带宽服务器95元一年&#xff0c;阿里云轻量2核2G3M带宽优惠价108元一年&#xff0c;不只是轻量应用服务器&#xff0c;阿里云还可以选择ECS云服务器u1&#xff0c;腾讯云也可以选择CVM标准型S5云…

linux vim用法

vim 查找关键字 /关键字 &#xff0c;回车即可。此为从文档当前位置向下查找关键字&#xff0c;按n键查找关键字下一个位置&#xff1b; ?关键字&#xff0c;回车即可。此为从文档当前位置向上查找关键字&#xff0c;按n键向上查找关键字&#xff1b; vim跳转 gg 跳转到第一…

C++中std::enable_if和SFINAE介绍

作为一个标准的C++模板类,我们先看下enable_if的定义: // STRUCT TEMPLATE enable_if template <bool _Test, class _Ty = void> struct enable_if {}; // no member "type" when !_Testtemplate <class _Ty> struct enable_if<true, _Ty> { //…

ICIF2023化工展首亮相,宏工科技解决方案助力制造升级

ICIF China 2023中国国际化工展览会于9月4日-6日在上海新国际博览中心举办。宏工科技携化工物料处理一站式解决方案首次亮相&#xff0c;同化工行业全产业链共叙物料处理自动化未来。 宏工科技是一家提供物料处理自动化设备、系统与服务的国家级高新技术企业&#xff0c;业务覆…

TCP/IP UDP广播无法发送或接收

TCP/IP UDP广播无法发送或者接收数据 在看《TCP/IP 网络编程》这本书的时候&#xff0c;看到广播那一节&#xff0c;跟着书上写代码&#xff0c;怎么写都不行&#xff0c;广播就是没法发送/接收&#xff0c;发送端一直在发送数据&#xff0c;接收端就是没有反应。 对了好几遍…

uniapp 微信小程序最新隐私弹窗更新方案,更新后无法登录问题解决方案

1&#xff0c;在manifest.json文件中的mp-weixin 节点下&#xff0c;添加&#xff1a;"__usePrivacyCheck__": true 2&#xff0c;在需要的页面配置隐私保护弹窗&#xff0c;或者直接写到首页也可以 <uni-popup ref"popusAuthorization" type"cen…

overleaf 参考文献引用,创建引用目录.bib文件,在文档中引用参考文献,生成参考文献列表

目录 1 创建一个Overleaf项目 2 导入或创建 .bib 文件 2.1 导入 .bib 文件&#xff1a; 参考文献的 .bib文件获取步骤 &#xff08;1&#xff09;打开谷歌学术 &#xff08;2&#xff09;输入文献题目 &#xff08;3&#xff09;点击引用&#xff0c;然后选择BibTex格式…

230908-MetaGPT构建专属AI Agent的技术实践-视频笔记

LangChain >>> 概念过载MetaGPT&#xff1a;通过AI&#xff0c;完成GPT的自举原编程应该是一个函数&#xff0c;而不是人去做3月到5月&#xff1a;目前业界所有开源工程及对应论文60&#xff0c;写了54篇对应笔记LangChain >>> 9万6000行代码&#xff0c;655…

opencv基础: 视频,摄像头读取与保存的常用方法

当然还可以从视频中抓取截图&#xff0c;所以现在聊一下常用的抓取视频截图的的方法。 VideoCapture 方法 cv2.VideoCapture();cv2.VideoCapture( device);cv2.VideoCapture(filename);上面有三种构造方法&#xff0c; 第一种是无法构造方法。 第二种参数device是一个数字。 …

SpringBoot+jSerialComm实现Java串口通信 读取串口数据以及发送数据

记录一下使用SpringBootjSerialComm实现Java串口通信&#xff0c;使用Java语言开发串口&#xff0c;对串口进行读写操作,在win和linux系统都是可以的&#xff0c;有一点好处是不需要导入额外的文件。 案例demo源码&#xff1a;SpringBootjSerialComm实现Java串口通信 读取串口…

文盘Rust——子命令提示,提高用户体验 | 京东云技术团队

上次我们聊到 CLI 的领域交互模式。在领域交互模式中&#xff0c;可能存在多层次的子命令。在使用过程中如果全评记忆的话&#xff0c;命令少还好&#xff0c;多了真心记不住。频繁 --help 也是个很麻烦的事情。如果每次按 ‘tab’ 键就可以提示或补齐命令是不是很方便呢。这一…

【已更新代码图表】2023数学建模国赛E题python代码--黄河水沙监测数据分析

E 题 黄河水沙监测数据分析 黄河是中华民族的母亲河。研究黄河水沙通量的变化规律对沿黄流域的环境治理、气候变 化和人民生活的影响&#xff0c;以及对优化黄河流域水资源分配、协调人地关系、调水调沙、防洪减灾 等方面都具有重要的理论指导意义。 附件 1 给出了位于小浪底水…

【算法题】小红书2023秋招提前批算法真题解析

文章目录 题目来源T1&#xff1a;5900: 【DP】小红书2023秋招提前批-连续子数组最大和5801: 【二分查找】小红书2023秋招提前批-精华帖子解法1——排序滑动窗口解法2——前缀和 二分查找 5000: 【模拟】小红书2023秋招提前批-小红的数组构造解法——数学 5300: 【哈希表】小红…