(二十三)Java反射

1.反射概念

反射允许对成员变量,成员方法和构造方法的信息进行编程访问,通俗理解就是允许从类里面拿东西,用途有提示词等,如下所示都是通过反射实现的

所以,学习反射就是学习从字节码class文件中获取成员信息并且对其进行解剖获得更细化的信息

                                                 

2.获取Class对象

  1. Class.forName("全类名");
  2. 类名.class
  3. 对象.getclass();
public class demo1 {public static void main(String[] args) throws ClassNotFoundException {Student s1 = new Student();Class c1 = Class.forName("com.mzz.reflect.Student");Class c2 = Student.class;Class c3 = s1.getClass();System.out.println(c1 == c2);System.out.println(c1 == c3);}
}
true
true

3.反射获取构造方法

Java之中万物皆对象,class字节码可以是class对象,构造方法是Constructor对象(在字节码文件中),成员变量是Field对象,成员方法是Method对象

public class demo2 {public static void main(String[] args) throws ClassNotFoundException {Class c1 = Class.forName("com.mzz.reflect.Student"); //全类名Constructor[] constructors1 = c1.getConstructors();//获取public的构造方法for (Constructor constructor : constructors1) {System.out.println(constructor);}//public com.mzz.reflect.Student(java.lang.String,int)//public com.mzz.reflect.Student()Constructor[] constructors2 = c1.getDeclaredConstructors();//获取所有构造方法,包括私有for (Constructor constructor : constructors2) {System.out.println(constructor);}int modifires = c1.getModifiers();System.out.println(modifires);//打印为1,权限修饰符}
}

3.反射获取成员变量

4.反射获取成员方法

5.反射案例

反射的作用:

  1. 获取一个类里面所有的信息,获取到了之后,再执行其他的业务逻辑
  2. 结合配置文件,动态的创建对象并调用方法

案例1: 保存信息,对于任意一个对象,都可以把对象所有的字段名和值,保存到文件中去

public class Demo3 {public static void main(String[] args) throws IOException, IllegalAccessException {Student s= new Student("小A", 23, "女");Teacher t = new Teacher("挑", 10000);saveobject(s);}private static void saveobject(Object obj) throws IllegalAccessException, IOException {//1.获取字节码文件的对象Class clazz = obj.getClass();//2.创建IO流BufferedWriter bw = new BufferedWriter(new FileWriter("myreflect\\a.txt"));//3.获取所有的成员变量Field[] fields = clazz.getDeclaredFields();for(Field field :fields) {field.setAccessible(true);//获取成员变量的名字String name = field.getName();//获取成员变量的值Object value = field.get(obj);//写出数据bw.write(name + "=" + value);bw.newLine();}bw.close();}
}

6.动态代理

特点:无侵入式的给代码增加额外的功能,适用于大型项目修改代码

对象如果嫌身上干的事太多的话可以通过代理来转移部分职责,所以说对象有什么方法想被代理,代理就一定要有对应的方法,那么代理怎么知道对象有什么方法想被代理呢?实现二者的共同接口

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

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

相关文章

AndroidAppWidget相关

特殊情况记录 OPPO FIND N Android14 当桌面已经存在AppWidget实例,如果应用处于杀死状态下,此时再创建相同的AppWidget实例不会触发AppWidget的更新。 创建不同的AppWidget对应的实例时才会一下子触发多个AppWidget示例的更新。

stable diffusion WEBUI Brief summary

1,rembg(去除背景-》蒙版) import rembg from PIL import Image, ImageOps import numpy as np# 打开图像 input_path "./p_6258838.jpg" input_image Image.open(input_path)# 移除背景,得到带有透明背景的图像 output_image rembg.remove…

Markdown语法详解及常见的使用场景

Markdown语法详解 Markdown概念一、标题二、段落三、字体样式四、列表五、链接和图片六、代码八、分隔线九、引用十、删除线和下划线十一、脚注十二、任务列表十三、高级技巧十四、目录生成 Markdown的应用场景 Markdown概念 Markdown是一种轻量级标记语言,以其简洁…

利用大模型进行复杂决策制定:PlanRAG技术的研究

人工智能咨询培训老师叶梓 转载标明出处 有效的决策制定对于组织的成功至关重要。传统的决策支持系统虽然在数据分析和决策辅助方面取得了一定的进展,但在处理需要复杂数据分析的决策问题时仍显不足。为了解决这一问题,来自韩国高等科学技术院&#xff…

fpga系列 HDL: 竞争和冒险 01

卡诺图是一种逻辑化简工具,用来在布尔函数的最小项和形式中,找到冗余项并实现逻辑化简。也可用于HDL中竞争和冒险的判断。 最小项 任何一个逻辑函数都能化简为最小项的和的形式对于 n 个变量的布尔表达式,每个变量都必须以原变量&#xff0…

JVM的内存模型是什么,每个区域的作用是什么,以及面试题(含答案)

JVM(Java 虚拟机)内存模型定义了 Java 程序在运行时如何分配、管理和优化内存。JVM 内存模型主要分为几个关键区域,每个区域有特定的作用: JVM 内存模型 堆内存(Heap): 作用:用于存…

VS2022搭建FFMPEG + Opencv开发环境 + 如何打包项目让程序也能独立跑在其他人的电脑上?

VS2022搭建FFMPEG Opencv开发环境 如何打包项目让程序也能独立跑在其他人的电脑上? 前言 本文的名字应该是我所写过的博客当中最长的,但内容以精简且保证实用为原则! 正文 首先是ffmpeg 环境搭建流程如下: 在网上下载已经被…

Zabbix企业级分布式监控环境部署

“运筹帷幄之中,决胜千里之外”。在IT运维中,监控占据着重要的地位,按比例来算,说占30%一点也不为过。对IT运维工程师来说,构建一个真正可用的监控告警系统是一项艰巨的任务。在监控系统的开源软件中,可供选…

山东科技大学 PTA (数据结构)7-5 银行业务队列简单模拟

设某银行有A、B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 —— 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客。给定到达银行的顾客序列,请按业务完成的顺序输出顾客序列。假定不考虑顾客先后到达的时…

基于模型划分的云边协同推理算法

摘要 在网络状态和任务需求的动态变化下,为减少模型推理时延和计算成本,在软件定义网络( Software Defined Network,SDN) 中提出了一种基于模型划分的云边协同推理算法。通过构建复杂度预测器分配任务执行环境,采用深度Q网络(Dee…

国产标准数字隔离器的未来---克里雅半导体

标准数字隔离器是电信号隔离技术的重要组成部分,近年来取得了重大进展。随着工业自动化、汽车电子和电信等行业对更高性能的需求不断增长,国内数字隔离器制造商正在稳步赶上全球标准。本文讨论了数字隔离器技术的新兴趋势、材料创新的影响,以…

网站建设中需要注意哪些安全问题?----雷池社区版

服务器与应用安全指南 1. 服务器安全 1.1 操作系统安全 及时更新补丁:确保操作系统始终安装最新补丁,以防范系统漏洞。例如,Windows Server 定期推送安全更新,修复如远程代码执行等潜在威胁。优化系统服务配置:关闭不…

一家医药企业终止,收入依赖阿里健康,学术推广费快赶上净利润

知原药业终止原因如下:知原药业报告期三年的推广费用超3亿元,快赶上这三年累计3.68亿元的净利润了,交易所质疑其学术推广费单价合理性、是否存在销售返利。并且,公司研发费用率低于行业平均水平,在电商平台营销主要依赖…

pytorh学习笔记——cifar10(三)模仿VGGNet创建卷积网络

VGG16是由牛津大学视觉几何组(Visual Geometry Group)提出的一种深度卷积神经网络模型。 VGGNet 探索了卷积神经网络的深度与其性能之间的关系,成功地构筑了 16~19 层深的卷积神经网络,同时拓展性又很强,迁移到其它图片…

【LeetCode】11.盛最多水的容器

思路: 利用双指针法进行移动,一个在头一个在尾,此时宽度最宽,当宽度缩小时,高度发生变化,从而可以找到最大值。 代码: int maxArea(int* height, int heightSize) {int* left height;int* …

仿真学习 | Fluent版本迭代一览及选择指南

在计算机辅助工程(CAE)领域,软件版本的更新迭代,影响了工程师的工作效率、工作习惯和仿真精度,“如何选择软件版本”也永远是摆在每个初学者面前的第一个难题。 计算流体动力学(CFD)领域的领军…

技术文档:基于微信朋友圈的自动点赞工具开发

概述 该工具是一款基于 Windows 平台的自动化操作工具,通过模拟人工点击,实现微信朋友圈的自动点赞。主要适用于需频繁维护客户关系的用户群体,避免手动重复操作,提高用户的互动效率。 官方地址: aisisoft.top 一、开发背景与技术…

嵌入式工程师必备——NTC曲线拟合

最近搞了一下NTC热敏电阻,打算和大家分享一下; 首先看NTC手册,25℃时是5K,温度系数B是3470,有一些NTC会直接给出公式,那种直接按照手册计算就好; 1、下面是温度和阻值对照表,这个表…

深度学习:YOLO目标检测和YOLO-V1算法损失函数的计算

简介 YOLO(You Only Look Once)是一种基于深度学习的目标检测算法,它的核心思想是将目标检测问题转化为一个回归问题,通过一个神经网络直接预测目标的类别和位置。 YOLO算法将输入图像分成SxS个网格,每个网格负责预测…

Golang | Leetcode Golang题解之第498题对角线遍历

题目&#xff1a; 题解&#xff1a; func findDiagonalOrder(mat [][]int) []int {m, n : len(mat), len(mat[0])ans : make([]int, 0, m*n)for i : 0; i < mn-1; i {if i%2 1 {x : max(i-n1, 0)y : min(i, n-1)for x < m && y > 0 {ans append(ans, mat[x…