J2EE框架(三)Reflect

J2EE框架技术第七章 反射机制与设计模式 在计算机系统中,还有 Windows 的回收站、操作系统中的文件系统、多线程中的线程池、显卡的驱动程序对象、打印机的后台处理服务、应用程序的日志对象、数据库的连接池、网站的计数器、Web 应用的配置对象、应用程序中的对话框、系统中的缓存等常常被设计成单例。1、优点:在运行时获得类的各种内容,进行反编译,对于Java这种先编译再运行的语言,能够让我们很方便的创建灵活的代码,这些代码可以在运行时装配,无需在组件之间进行源代码的链接,更加容易实现面向对象。责任链简化了对象之间的连接。降低了对象之间的耦合度。 阅读详情

反射能做什么?


反射可以根据Class对象获取和设置它的所有,字段、方法、构造方法、类的注解,可以操作任何修饰字段、方法的能力当然包括私有修饰符


反射的边界是什么?


反射只能获取方法的返回类型、返回值、参数、并不能获得方法中的执行代码,当然我们可以通过代理动态注入新的执行代码但原代码永远存在且不变。


运用反射注意什么?


1、反射本质是获得Class对象的属性、方法,而我们所有对象都公用一个Class类型,所以用反射调用方法时需要给它一个具体的对象,这个对象就是Class对象转换后的对象(往往我们是用newInstance()方法把Class对象转换为具体的某个对象)


2、反射中类型是用的整数常量如下:

public static final int ABSTRACT 1024

                       public static final int FINAL 16

                       public static final int INTERFACE 512

                       public static final int NATIVE 256

                       public static final int PRIVATE 2

                        public static final int PROTECTED 4

                       public static final int PUBLIC 1

                       public static final int STATIC 8

                       public static final int STRICT 2048

                       public static final int SYNCHRONIZED 32

                       public static final int TRANSIENT 128

                       public static final int VOLATILE 64

3、方法、字段、构造方法都继承与AccessibleObject对象

这个对象可以操作访问权限和字段方法注解,最常用的setAccessible(boolean flag),设置为true就可以访问私有变量

4、Class 对象的以下方法需要注意:

getFields()

         返回一个包含某些 Field 对象的数组,这些对象反映此 Class 对象所表示的类或接口的所有可访问公共字段。

getDeclaredFields()

         返回 Field 对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段。

   getMethods()

          返回一个包含某些 Method 对象的数组,这些对象反映此 Class 对象所表示的类或接口(包括那些由该类或接口声明的以及从超类和超接口继承的那些的类或接口)的公共 member 方法。

getDeclaredFields()

         返回 Field 对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段。


反射代码实例:

public class Cat {
	// 静态模块
	static {
		System.out.println("我是静态内容");
	}


	// 无参构造方法
	public Cat() {
		System.out.println("我是构造方法");
	}
	// 有参构造方法
		public Cat(String str,int num) {
			System.out.println("有参构造方法"+str+num);
		}


	 List<Cat> catList=new ArrayList<Cat>();
   //静态变量
	public static int AGE=10;
   
	private String catName;
	
    public String  catPlay="玩溜溜球";
    
    public void setCatName(String catName) {
		this.catName = catName;
	}
	/**
	 * 
	 * @return 获取猫的名字
	 */
	public String getCatName() {
		return catName;
	}

}
具体反射代码:
//构造方法
	@Test
	public void testReflectConstuctor() throws Exception{
		//1、获得Class对象
		Class<?> cl=Class.forName("com.lovo.Cat");
		//2、获取所有构造方法
		Constructor cs[]=cl.getConstructors();
		//3、获取构造方法名字、参数,构造方法并无返回值
		for(Constructor c:cs){
			int i=c.getModifiers();
			/**
			 *   public static final int ABSTRACT 1024 
				 public static final int FINAL 16 
				 public static final int INTERFACE 512 
				 public static final int NATIVE 256 
				 public static final int PRIVATE 2 
				 public static final int PROTECTED 4 
				 public static final int PUBLIC 1 
				 public static final int STATIC 8 
				 public static final int STRICT 2048 
				 public static final int SYNCHRONIZED 32 
				 public static final int TRANSIENT 128 
				 public static final int VOLATILE 64 
			 */
			//获得修饰符
			System.out.println("修饰符常量="+i);
			//获取方法名
			String methodeName=c.getName();
			System.out.println(methodeName);
			//获取参数类型素组
			 Class[] typeClasss=c.getParameterTypes();
			 for(Class tcl:typeClasss){
				 System.out.println("构造方法参数类型按照顺序"+tcl.getName());
			 }
			 //  使用此 Constructor 对象表示的构造方法来创建该构造方法的声明类的新实例,并用指定的初始化参数初始化该实例。
			 if(typeClasss.length>0){
				 //有参构造方法
			 c.newInstance("小花猫",5);				
			 }else{
				 //无参构造方法
				 c.newInstance();
			 }
		}
		
		
	}
	
	@Test
	public void testReflectFiled() throws Exception{
		//1、获得Class对象
		Class<?> cl=Class.forName("com.lovo.Cat");
		//获取非私有字段数组
		//Field fs[]=  cl.getFields();
		//获取所有字段数组
		Field fs[]=  cl.getDeclaredFields();
		//循环获取所有字段
		for(Field f:fs){
			//AccessibleObject类是 Field、Method 和 Constructor 对象的基类。
			//此方法为AccessibleObject类的方法,让反射是无忌惮的访问所有修饰类型
			f.setAccessible(true);
			System.out.println("字段修饰="+f.getModifiers());
			System.out.println("字段类型="+f.toGenericString());
			System.out.println("字段名称="+f.getName());
			System.out.println("获得值="+f.get(cl.newInstance()));
			//给catName字段设置新的值
			if(f.getName().equals("catName")){
			Object obj= cl.newInstance();
			f.set(obj,"小白猫");
			//获取新值
			Cat c=(Cat)obj;
			System.out.println("新值="+c.getCatName());
			}
		}
	}
	
	@Test
	public void testRefletMethod() throws Exception{
		//1、获得Class对象
		Class<?> cl=Class.forName("com.lovo.Cat");
		//获取所有非私有方法
		//Method []ms=cl.getMethods();
		//获取所有方法
		Method []ms=cl.getDeclaredMethods();
		//转换为具体的对象
		Object obj=cl.newInstance();
		for(Method m:ms){
			System.out.println("返回方法修饰="+m.getModifiers());
			System.out.println("返回方法返回类型="+m.getGenericReturnType().toString());
			System.out.println("返回方法名="+m.getName());
			System.out.println("获取方法参数类型"+m.getGenericParameterTypes());
		
			if(m.getName().equals("setCatName")){
				//设置		
				m.invoke(obj, "新猫咪");				
			}
		}
		
		for(Method m:ms){
			if(m.getName().equals("getCatName")){
				System.out.println("返回值="+m.invoke(obj));
			}
		}
	}
汽车诊断服务(UDS——0x11服务解析) ECU复位服务(0x11)详解:该服务支持硬件/钥匙开关/软件三种复位类型(0x01-0x03),复位前需发送肯定响应。请求格式为11+子功能,响应含51+子功能。典型应用需配合安全访问流程,测试时需监控CAN总线通信及DTC状态。复位后ECU将返回默认会话,期间不处理任何诊断请求。服务在编程会话且安全解锁后执行,硬复位会初始化存储数据。 阅读详情

相关推荐

有源滤波电路设计

目录一、低通滤波器1、同相输入低通滤波器(1)一阶低通滤波电路(2)二阶低通滤波电路(压控电压源;Sallen-Key)2、反相输入低通滤波器(1)一阶低通滤波电路(2)二阶低通滤波电路(无限增益多路反馈)二、高通滤波器1、同相输入高通滤波器(1)一阶高通滤波电路(2)二阶高通滤波电路(压控电压源;Sallen-Key)2、反相输入高通滤波电路(1)二阶高通滤波电路(无限增益多路反馈) 一、低通滤波器 1、同相输入低通滤波器 (1)一阶低通滤波电路 即在一阶无源低通滤波器的基础上,加了一个集成运放。 它的

qq_41873236的博客 3万+

JavaEE中Reflect反射的作用是?

通过反射机制可以动态的实例化对象、读写属性、调用方法。 反射(Reflection)是一种机制,是框架的必学技,是框架设计的灵魂 框架的底层代码都是采用了反射机制。 Java反射相关的主要API java.lang.Class 代表一个类 java.lang.reflect.Method 代表类的方法 java.lang.reflect.Field 代表类的成员变量(属性) java.lang.reflect.Constructor 代表类的构造方法 使用反射机制的前提条件:必须先得到

Do_LaLi的博客 272

PFC胶结模型实战:从线性到平行粘结的力学行为解析

本文深入解析了PFC中线性接触与平行粘结(pb模型)的核心差异与应用。平行粘结模型通过模拟胶结层的力学行为,能够有效传递拉力和抵抗弯矩,是模拟岩石、混凝土等胶结材料的关键。文章详细介绍了其变形与强度参数的设置、法向与切向行为的验证方法,并揭示了全量与增量力计算中易出现的“幽灵力”问题及其解决方案,为复杂模型的构建与调试提供了实用策略。

weixin_29230773的博客 1208

J2EE反射(Reflect)

1.什么是反射? 反射是java语言中的一种机制,通过这种机制可以动态的实例化对象、读写属性、调用方法 2.反射有哪几种方法 1.1实例化对象 c.newInstance() --实例化 1.2动态调用方法 Method m; --找到方法 m.invoke --调用 1.3读写属性 set/get --设置值和获取 反射是java语言中一个机制,它可以利用这种机制动态实例化对象(构造函数)...

x0701的博客 235

ECN实战指南:如何用SAP系统搞定工程变更(附库存处理避坑技巧)

本文详细解析了如何在SAP系统中高效执行工程变更通知(ECN),特别聚焦PP模块的操作流程与库存处理技巧。通过实战案例和系统操作指南,帮助制造业企业避免库存混乱和生产中断,实现从创建到生效的全流程管理。

m5n6o7的博客 1079

esp32s3 spi camera gc6133调试

gc6133 spi只有master模式,同时需要esp32提供主时钟,需要有主时钟然后才能通过i2c进行初始化.测试了几种方式,记录如下。

hclydao的专栏 1564

J2EE基础:反射Reflect

本节知识总结 目录 本节知识总结 前言 一、反射是什么? 反射Java语言的一种机制,通过这种机制可以动态的实例化对象、读写属性、调用方法 二、类类(类对象的三种获取方式) 1.Class.forName(完整类名) 2.类名.class 3.对象.getClass() 三、反射实例化 用反射调用无参构造器用:newlnstance 用反射调用有参构造器用:getConstructor 用反射调用私(公)有的构造器用:getDeclaredConstructor *...

qq_54936371的博客 274

企业知识库AI助手的权限管理架构:如何实现细粒度控制?

在展开架构设计前,我们需要先明确“细粒度权限”的核心定义,并理解它对AI助手的特殊意义。权限管理的“粒度”,本质是权限控制的精准程度。维度粗粒度权限细粒度权限资源范围entire document(整个文档)field/paragraph(字段/段落)操作类型read/write(读/写)generate_summary/download/export(生成摘要/下载/导出)上下文约束无(静态权限)time/ip/device(时间/IP/设备)适用场景简单系统(如内部wiki)

大数据洞察的博客 1042

J2EE 反射(Reflect)

在jdk的配置环境中   从俩个地方体现出:一个是XML解析  另一个是实体类 而实体类则需要运用反射jdk里面jre转译:是将.java文件转化为.class的文件                    而今天我们说的是反射  它是将.class文件转为.java文件              1. 什么是反射?   反射是java语言中的一种机制,通过这种机制可以动态的实例化对象、读写属性、调...

盖世小可爱的博客 316

【ARMv8 异常模型入门及渐进7 - GIC及安全中断介绍】

GIC-v3中,引入了支持2种安全状态(secure state),也就是对于中断,根据secure状态,分为安全中断和非安全中断。当然也可以只支持一种安全状态。这里的2种安全状态和1种安全状态,主要是影响中断分组,所使用IRQ和FIQ管脚的映射,以及gic中的寄存器访问。

CodingCos的博客 2116

Altium Designer(AD)仿真实验操作指南

1:运行仿真2:设置仿真3:放置电源模块4:放置器件模块5:探针。

XU157303764的博客 8898

sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)类型错误

珑歆逸的专栏 5万+

【工具插件类教学】Unity翻书效果插件Book-Page Curl Pro教程

特征: • 从左到右和从右到左翻页 • 与画布缩放器 配合使用 • 可配置的自动翻转脚本 • 支持向页面 添加 UI 元素 • 支持透明页面 • 适用于“世界空间”画布

纯技术流日常开发商业开发记录总结等 3674

javaee exception

1.starting filter struts2 java.lang.RuntimeException: java.lang.reflect.InvocationTargetException启动Tomcat时出现异常,Tomcat版本低,而导入的jar包版本高

weixin_38071136的博客 220

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

javaEE第二阶段报错信息及原因记录(Spring+Mybaits+SpringMVC+Maven+mapper逆向工程)

javaEE第二阶段,使用技术:Spring+Mybaits+SpringMVC+Maven+mapper逆向工程 1. 报错信息:org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'itemsDao' defined in file [D:\IDEA\maven_day...

我想做阿信的博客 1988

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Java-Reflect

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

菜菜鱼的博客 314

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy BUG排查

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33672109的博客 3258

关于在struts2中使用java注解报异常 java.lang.reflect.InvocationTargetException

<br />在struts2使用java persistence api 中的注解报了一个异常<br /> <br />Column column = field.getAnnotation(Coloum.class);<br /> <br /> <br />java.lang.reflect.InvocationTargetException<br /> <br />原因是tomcat中没有导入相关的jar<br /> <br />将javaee.jar  放入到部署后工程的lib中  仍然报错<br /

天下无双 2331

java.lang.reflect.InvocationTargetException java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I

<br />java.lang.reflect.InvocationTargetException<br /> java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I<br />这个异常是由于jar冲突造成的,在javaEE项目中,各种框架或许有相同的jar包,但版本不同。这时就会这个问题,解决的办法就是仔细检查,删除其中一个版本的jar包。

centre10的专栏 1819

类加载机制以及Java-Reflect(反射)

1、类的生命周期:指的是一个类被加载到JVM中运行到被卸载的过程,类的生命周期主要经过了类加载,验证,准备,解析,初始化,使用和卸载7个步骤。 2、类加载:主要是把class文件加载到JVM中,同时生成该类所对应的Class对象,该class对象是Java反射的起源,通过该对象可以在类运行期间‘窥探’类的结构信息。 3、类的连接:    (1)验证:JVM负责检查被加载的类是否有正确的内部

Ashes 697

J2EE疑难解决实例--转自JSP中文网

Best Story I  System.out.println("total memory is: " + java.lang.Runtime.getRuntime().totalMemory() / 1024);  System.out.println("free memory is: " + java.lang.Runtime.getRuntime().freeMemory() / 1024

天大地大 1155

java的反射Reflect机制之Method篇

<br />                       最近刚刚开始接触java的反射API,然后使用对j2EE或j2ME中许多框架的设计中有了一个大概的实现途径。现就自己学习到的知识做一个归纳。以后自己也会继续写java Reflect 机制的文章。<br />         Reflect更改介绍:我们可以将java中的各种各样的部分看成是一个一个的对象---也就将类(class)中的各种各种的成分(例如,方法、属性、构造函数、描述符)映射成一个一个的类(Class)。<br />        重

奋斗一生---活的快乐 847

tomcat 相关异常

端口没有被占用却提示Several ports (8005, 8080, 8009) required by Tomcat??? 解决办法:1、运行cmd进入命令行界面;2、运行命令: netsh winsock reset3、重启电脑在运行tomcat,可以正常启动。 Tomcat version 8.5 only supports J2EE 1.2, 1.3, 1.4, and ...

weixin_30475039的博客 112

java自己写一个事物_java笔记:自己动手写javaEE框架(五)--Spring事务管理学习...

上篇文章写到了编程式事务的使用TransactionTemplate类的实现,TransactionTemplate类里的execute方法需要TransactionCallback接口实现类做参数,其接口的定义中只包含一个doInTransaction方法用于执行事务操作,上面的代码中使用匿名类的方式定义TransactionCallback接口实现,并且在doInTransaction()方法...

weixin_34294809的博客 218

Java学习笔记---Reflect

JAVA类加载和反射介绍 简单的来说,反射机制指的是程序在运行时能够获取自身的信息。在java中,只要给定类的名字,那么就可以通过反射机制来获得类的所有信息. 反射机制的优点就是可以实现动态创建对象和编译,体现出很大的灵活性,特别是在J2EE的开发中它的灵活性就表现的十分明显。 当程序主动使用某个类时,若该类还没加载到内存中,系统会通过加载,链接,初始化3个操作对类进行初始化

443
上一篇: J2EE框架(二)Class
下一篇: J2EE框架(四)核心设计模式
烟云冬少
博客等级 码龄19年 20粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值