java反射机制简介及简单应用

Java基础知识之反射机制简介 Java基础知识之反射机制简介,在程序运行中动态地获取类的相关属性,同时调用对象的方法和获取属性,这种机制被称之为Java反射机制,Java反射是Java实现动态语言的关键,也就是通过反射实现类动态加载 阅读详情

一,文字理解java反射的概念

反射的概念是由Smith在1982年首次提出来的,主要值程序可以访问,检测修改它本身的状态或行为的一种能力。

java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意属性方法,这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。

java语言强调万物皆对象,反射就是把java类中的各种成分映射成一个个的Java对象。比如一个java类中有:成员变量,构造方法,方法等信息,反射就是把这些信息解析成一个个的对象。 

二,反射演示

1、获取Class对象的三种方式

1.1 Object ——> getClass();

1.2 任何数据类型(包括基本数据类型)都有一个“静态”的class属性

1.3 通过Class类的静态方法:forName(String  className)(常用)

package com.xt.ssf.refTest;

import java.lang.reflect.Method;

import org.apache.commons.beanutils.BeanUtils;

public class RefTest {
	
	public static void main(String[] args) {
		BeanUtils bean = new BeanUtils();
		try {
			Class cls = Class.forName("org.apache.commons.beanutils.BeanUtils");
			Class cls1 = bean.getClass();
			Class cls3 = BeanUtils.class;
			Method[] method = cls.getMethods();
			for(Method methods: method){
				System.out.println("方法名"+methods);
			}
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}

}

三,java反射简单应用

1>,java反射简化servlet应用

我们在对jsp页面的数据进行处理一般在servlet内进行,例如学生信息的增删改查,我们往往需要对于每一个功能创建一个sevrlet,这样不仅要写许多无用的代码,而且容易在使用时发生混乱。假如,我们可以把这些方法都写在一个servlet内,我们在使用时通过方法名调用岂不是很简便,这就用到了上面讲到的java反射机制。下面是使用学生信息的增删改查对于这个简单应用的演示,

package com.xt.ssf.refTest;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Student extends BaseServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	
	public void addStu(HttpServletRequest request,HttpServletResponse response){
		
	}
	public void delStu(HttpServletRequest request,HttpServletResponse response){
			
	}
	public void queryAllStu(HttpServletRequest request,HttpServletResponse response){
		
	}
	public void updateStu(HttpServletRequest request,HttpServletResponse response){
		
	}
}
package com.xt.ssf.refTest;


import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;


import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class BaseServlet extends HttpServlet{
	
/**
 * 
*/
private static final long serialVersionUID = 1L;


public void doGet(HttpServletRequest request,HttpServletResponse response){
doPost(request,response);
}
public void doPost(HttpServletRequest request,HttpServletResponse response){
String handler = request.getParameter("handler");
Method method;
try {
method = this.getClass().getDeclaredMethod(handler, HttpServletRequest.class,HttpServletRequest.class);
method.invoke(this,request,response);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}

上述第一个servlet  Student继承了第二个servlet BaseServlet,这样我们就可以将方法都写进第一个servlet,然后在第二个BaseServlet内使用反射得到Student中的方法,根据jsp页面的传来的方法名调用Student内具体的方法,运行方法使用到invoke()函数。这就是使用反射简化servlet代码的基本方法。

2>,java反射简化数据库操作

这个应用主要是使用commons-dbutils架包中的 QueryRunner中的execute(Connection, String, ResultSetHandler<T>, Object...)方法:

执行查询,参数String为要执行的sql查询语句,用来把结果集映射成你想要的结果,ResultSetHandler<T>为一个接口,正是利用实现这个个接口中的handler方法,将数据库的操作封装到一个匿名内部类中,使得数据库的操作更为简便。这里面用到的反射:就是在你只有架包时可以使用反射调用或重写其中的方法实现一些自己的操作。

QueryRunner qr= new QueryRunner();
try {
stuList = qr.execute(conn,sql,new ResultSetHandler(){  //匿名内部类
public List<StuInfo> handle(final ResultSet rs){
final List<StuInfo> stuList = new ArrayList<StuInfo>();
					
try{
while(rs.next()){
StuInfo stu = new StuInfo();
stu.setStuNo(rs.getString("stuno"));
stu.setStuName(rs.getString("stuna"));
stu.setAge(rs.getInt("age"));
stu.setGender(rs.getString("gender"));
stu.setBirthday(rs.getString("birthday"));
stuList.add(stu);
}
}catch(final SQLException e){
e.printStackTrace();
}
return stuList;
}
},null);

上面是具体使用到反射的部分代码。

3>,java反射简化servlet对jsp页面传来数据的处理
这个应用和2>差不多,类似于使用架包内的类的方法处理数据使得数据的操作变得简单。这里使用到了 commons-beanutils 架包中的BeanUtils类中的populate方法将map类型的数据封装转换成bean类型的数据,便于传送。
Map<String,String[]> map = request.getParameterMap();
try {
BeanUtils.populate(st, map);//核心方法
sd.addStu(st);	
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
具体对于java反射的更多底层的原理知识可以 点开链接,十分详细有助于深层次的理解java反射机制。







Java反射机制详解与应用 本文还有配套的精品资源,点击获取 简介:Java反射机制是一种在运行时解析类、接口、字段和方法信息并操作它们的特性。它在框架开发、动态代理、插件系统和元数据处理等领域发挥着重要作用。文章首先介绍了反射的原理和获取 Class 对象的方法,接着详细讨论了如何使用反射来创建对象、访问字段和调用方法。最后,文章探讨了反射的应用场景和优缺点,并强调了合理使用反射的重要... 阅读详情

相关推荐

图灵奖:计算机科学领域的诺贝尔奖

最后,图灵奖也是计算机科学领域发展的重要推动力之一,它促进了该领域的进步和繁荣。图灵奖作为计算机科学领域的诺贝尔奖,不仅是对获奖者卓越贡献的肯定,更是对整个计算机科学领域的推动和激励。在未来的发展中,我们期待看到更多的科学家和团队在图灵奖的激励下不断取得新的突破和创新成果为计算机科学的发展注入新的活力和动力。Vinton G. Cerf和Robert E. Kahn:2004年图灵奖得主,由于他们在互联网方面开创性的工作而获奖,这包括设计和实现了互联网的基础通讯协议TCP/IP,以及在网络方面的卓越领导。

wangnvshibeib的博客 2626

Java 中的反射机制(两万字超全详解)

文章目录一、反射概述1. 什么是反射?2. 反射机制原理3. 反射优点和缺点4. 类加载概述5. 类加载各阶段完成的功能5.1 加载阶段5.2 连接阶段——验证5.3 连接阶段——准备5.4 连接阶段——解析5.5 初始化阶段二、Class 类1. 动态加载2. 小结三、访问字段1. 获取字段值2. 设置字段值3. 小结四、调用方法1. 调用方法2. 调用静态方法3. 调用非 public方法4. 多态5. 小结五、调用构造方法六、获取继承方法1. 获取父类的Class2. 获取interface3. 继承

林二月的博客 3万+

STM32实战:增量式PID控制气体流量(附完整代码与调参技巧)

本文详细解析了如何在STM32平台上实现气体流量控制的增量式PID算法。内容涵盖从系统硬件架构选型、增量式PID算法原理与代码实现,到ADC采样滤波、PWM驱动配置等关键外设驱动,并提供了完整的参数整定技巧与工程调优实战指南,帮助开发者构建稳定可靠的气体流量控制系统。

rose2的博客 622

day17-基础加强(类加载器和反射)

1.类加载器 1.1类加载器【理解】 作用 负责将.class文件(存储的物理文件)加载在到内存中 1.2类加载的过程【理解】 类加载时机 创建类的实例(对象) 调用类的类方法 访问类或者接口的类变量,或者为该类变量赋值 使用反射方式来强制创建某个类或接口对应的java.lang.Class对象 初始化某个类的子类 直接使用java.exe命令来运行某个主类 类加载过程 加载 通过包名 + 类名,获取这个类,准备用流进行传输 在这个类加载到内存中 加载完毕创建一个class对象

weixin_48048140的博客 658

Cursor 详细使用

Cursor 是一款基于 VSCode 开发的 AI 驱动代码编辑器,集成 GPT-4、Claude3.5 等先进 LLM,具备代码补全、生成、解释、调试等功能,可提升开发效率和代码质量。3. 代码编辑:在编辑区编写代码,利用快捷键提升效率,如 Ctrl+Space 触发智能代码补全、Ctrl+K 润色或修改代码、Ctrl+L 智能问答与代码编辑。3. 代码解释:选中代码,按 Ctrl+L,输入如 “解释这段代码的功能”,Cursor 会给出详细解释。

坚持写博客,大家的关注是我前进的动力! 4818

告别硬件!用Wokwi在线模拟ESP32点灯,5分钟搞定开发环境搭建

本文介绍如何使用Wokwi在线模拟器快速搭建ESP32开发环境,5分钟内完成点灯实验。无需硬件即可体验GPIO控制、PWM调光等核心功能,特别适合物联网开发初学者和快速原型验证。Wokwi的零成本、全功能模拟特性让嵌入式开发变得前所未有的简单高效。

weixin_42567497的博客 495

五步搭建自己的简易低代码平台

前言平时开发项目时,总会写很多crud代码,开发过程基本一个套路,定义controller、service、dao、mapper、dto,感觉一直在repeat yourself也接触过很多快速开发框架,定义一个sql就可以生成接口,或者定义一个框架脚本自动生成接口,但感觉这些框架没有说太成熟广泛使用的,出了问题也很难解决本文重点研究一下如何只通过定义sql就自动生成接口,但是只是简单实现,为提供...

5150

comfyui中的k采样器报错Given groups=1, weight of size [320, 4, 3, 3], expected input[2, 8, 96, 54] to have 4

求助大佬!!!我运行comfyui的时候,k采样器变紫,同时报错显示:

M1226401728的博客 5181

java中的反射机制(重要)

                                             java中反射 一、反射的含义及作用 1.JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法; 2.对于任意一个对象,都能够调用它的任意方法和属性; 3.这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制 二、如何得到反射(以包名为test中的Stud...

xiaoQ 8770

开关电源中的高频振荡噪声及其抑制方法

在开关电源的工作过程中,随着开关管的开关动作,电流和电压波形会出现剧烈的波动,尤其是在开关管切换的瞬间,往往会导致较强的过冲现象。开关电源中的高频振荡噪声是导致电磁兼容问题的主要源头之一,尤其是MOS管的通断和整流二极管的反向恢复过程中,会产生较强的高频振荡噪声。通过合理调节R和C的值,可以大大缓解高频振荡带来的EMC问题,从而有效提升电源的电磁兼容性。整流二极管反向恢复时的振荡会导致高频噪声产生,这些高频噪声源可被传导到电源的输出端,甚至可能通过电源的共地路径扩散到其他电路,影响系统的稳定性和可靠性。

硬核科技 1531

数据结构之博弈树搜索(深度优先搜索)

数据结构之博弈树搜索(深度优先搜索)

LucianaiB的博客 1527

【Java】反射( reflection)机制 详解

【Java】反射( reflection)机制 详解

xqs196301的博客 3082

AI Agent Harness内容审核:生成内容合规

在过去的几年里,生成式人工智能(Generative AI)技术取得了爆炸性的发展。从 GPT-4、Claude 这样的文本生成模型,到 Midjourney、Stable Diffusion 这样的图像生成工具,再到 Sora 这样的视频生成模型,AI 已经具备了媲美甚至超越人类的内容创作能力。然而,技术是一把双刃剑。随着生成式 AI 的普及,内容安全与合规风险也呈指数级增长。

AI架构师小马 300

Java反射机制在工厂模式中的应用

在本篇文章中就不详细介绍工厂模式,主要介绍一下反射在工厂模式中的使用,让读者对反射机制带来的好处有更深的认识。 首先看一下简单工厂模式 简单工厂模式(simple factory)是类的创建模式,又叫静态工厂方法(static factory method)模式。 简单工厂模式就是由一个工厂类根据传入的参数决定创建哪一种的产品类。 简单工厂模式实例: //动物接口 interface A

小草的博客 7245

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

反射机制及应用

反射你都弄懂了吗?

qq_46091953的博客 924

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

java反射机制及在Abdroid的应用

想写一篇比较短的博客,总结一下java反射机制以及Android中的应用,因为博客太长很多人看着会头疼,而且多去重复那些反射机制的具体实现方式也没啥意义,所以想写的简单易懂些,别过段时间自己看着都头疼。如果想了解反射机制的具体实现,网上有很多,可以搜一下。      JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属

gjnm820的博客 1781

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Java反射机制

一、Java反射机制是什么?1、Java反射机制()是Java语言中一种动态(运行时)访问、检测 & 修改它本身的能力,主要作用是动态(运行时)获取类的完整结构信息 & 调用对象的方法~获取该对象的成员变量 & 赋值调用该对象的方法(含构造方法,有参/无参)判断该对象所属的类2、更通俗点的说,我们使用某个类,都会知道这个类,以及要用它来做什么,可以直接通过new实例化创建对象,然后使用这个对象对类进行操作,这个就属于正射~3、而反射则是一开始并不知道要初始化的是什么类,无法使用new。

新征程的博客 1646

Java反射机制简介及简单实例

一、什么是反射机制          简单的来说,反射机制指的是程序在运行时能够获取自身的信息。在java中,只要给定类的名字,      那么就可以通过反射机制来获得类的所有信息。  二、哪里用到反射机制          有些时候,我们用过一些知识,但是并不知道它的专业术语是什么,在刚刚学jdbc时用过一行代码,      Class.forName("com.mysql.jdbc.

海阔天空 不再犹豫 谁共我闯荡 2333

简单概述Java反射机制

网上有个很有意思的解释,Java是一个大美女,但大美女有很多事情是规定不让你做的,反射就是把枪,有枪在手,你想让大美女做什么事就做什么事,脱光都没事吗,希望这段解释能让更多人理解Java的反射机制

2301_77369152的博客 698

Java反射机制--基本使用方法简介

Reflection(反射)是Java程序开发语言的特征之一,它允许运行中的 Java程序对自身进行检查,或者说"自审",并能直接操作程序的内部属性。例如,使用它能获得 Java类中各成员的名称并显示出来。 Java的这一能力在实际应用中也许用得不是很多,但是在其它的程序设计语言中根本就不存在这一特性。例如,Pascal、C或者 C++ 中就没有办法在程序中获得函数定义相关的信息。反射机制是构建框架技术的基础所在,灵活掌握Java反射机制,对大家以后学习框架技术有很大的帮助。

奇点临近 9466

Java的反射机制的简单理解

文章目录前言一、什么是反射机制?二、使用步骤1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、什么是反射机制? 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 二、使用步骤 1.引入库 代码如下(示例): import numpy as np import pand

outsiderg的博客 359

Java的反射机制

定义在Java运行时环境中,对于任意一个类,能否知道这个类有哪些属性和方法?对于任意一个对象,能否调用它的任意一个方法?答案是肯定的。这种动态获取类的信息以及动态调用对象的方法的功能来自于Java 语言的反射(Reflection)机制。反射(Reflection)是Java语言的特性之一,能够让Java程序在运行时动态地执行类的方法、构造方法等。可以说有了反射,不管什么类在我们面前都毫无隐私可言,什么privateprotecteddefault。

晓的博客 1287

java反射机制实际应用_java反射机制实际应用

其中 LEAD/LEAD++ 、OpenC++ 、 MetaXa 和 OpenJava 等就是基于反射机制的语言。最近,反射机制也被应用到了视窗系统、操作系统 和文件系统中。 反射本身并不是......以下这个类运用反射机制调用其 add()和 echo()方法,代码如下: Invoketester.java 代码 1. import java.lang.reflect.Method; 2. 3....

weixin_42453050的博客 370

简单工厂模式+反射机制

提示: 文章目录前言二、使用步骤1.客户端测试2.MedSUV类3.SuperSUV类3.CarFactory简单工厂4.SUV接口 前言 记录一下反射机制的学习: # 一、反射机制是什么? 反射是java语言的一种基本机制,通过这种机制可以动态的实例化对象、调用方法、读写属性 二、使用步骤 1.客户端测试 代码如下(示例): package test1; import java.lang.reflect.*; public class Client { public static void

deepthoatsmoke的博客 412

Java反射机制简介

       谈到反射,先来说说类文件(即class文件)加载的过程中的一个阶段,这个阶段也叫加载,主要干的事是将二进制字节流所代表的静态存储结构转化为内存中的Class对象,作为访问该类信息的一个入口。        然后,在这里简单介绍下Class对象:java虚拟机自动构造的对象,基于class文件中类的的所有信息,运行时内存中存储,对象实例具体存放在方法区中(JDK1.7及1.7之前的版...

qq_40254236的博客 172
上一篇: 键盘打字游戏简要代码
下一篇: wkhtmltopdf学习记录
A__cup__of__Java
博客等级 码龄9年 19粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值