java反射机制 以及通过反射获得类的变量字段,方法,构造函数

Java中反射机制详解 解释:需要明白servlet的生命周期,也就是service方法,因为是servlet,所以在访问的时候,会经过service方法,而子类MyServlet001中并没有,所以就到父类BaseServlet中找,发现有,然后获取参数即知道了需要调用什么方法,因为方法的编写都在子类中,所以通过反射,获取到子类中对应的方法并运行,其中需要注意的是this这个参数在BaseServlet中的用法。注意newProxyInstance的三个参数,第一个,类加载器,第二个被代理对象的接口,第三个代理对象。 阅读详情
反射机制

首先获得类模板的方式有三种:

1. Class cls=对象名.getClass();//使用这种方式获取类模板有局限性:必须现有对象才能得到类模板对象

2.Class cls=Class.forName(包名+类名的字符串);//最常用的,只要知道完全限定名(包名+类名)字符串即可获取类模板对象

3.Class cls=类名.class;//最简单,也比较常用,但必须指定类名才能获取类模板对象

可以根据类模板实例化对象:Object obj=类模板对象.newInstance();//类模板对应的对象的字节码文件中必须有无参构造函数,否则报异常。


 注意:

 结论1:同一种类型的对象获取的类模板对象是同一个对象

结论2:三种获取类模板的方式不同,但同于同一类型的对象获取的类模板是同一个对象.

简单而言:同一  .class文件的模板是同一对象, 使用以上三种获取的类模版对象也是同一对象


其次通过反射获得类的字段,方法,构造函数,并附参数:

(1)根据类模板对象获取对象的字段信息
Class clz=Class.forName("day_29_ReflectAndJson.Person");//获取类模板对象
              Field[] fields=clz.getFields();  //获得该类及其父类的所有字段
            for(Field field:fields)//利用增强for循环分解字段
            {
                int modifier=field.getModifiers();//代表访问修饰符的数字
                String strModifier=Modifier.toString(modifier);//将访问权限对应的数字还原成对应的字符串
                Class type=field.getType();//获得变量类型
                 String str=field.getName();//获得变量名
                 System.out.println(strModifier+" "+type+" "+str);// 输出结果: public class java.lang.String address
            }        

               //根据字段名获取字段对象

            Field field=clz.getField("address");
            Object obj=clz.newInstance();//根据类模板实例化对象
            field.set(obj, "北京");           //给obj对象的address字段赋值为 北京       
         System.out.println(field.get(obj));//获取obj对象中的address字段的值
            //获取本类中所有字段并赋值
            Field[] fieldsDec=clz.getDeclaredFields();
            for(Field field1:fieldsDec)
            {
                int modifiers=field1.getModifiers();
                String strModifiers=Modifier.toString(modifiers);
                Class type=field1.getType();
                String name=field1.getName();
                System.out.println(strModifiers+" "+type+" "+name);
            }
            //给私有字段赋值
              Field fieldDec=clz.getDeclaredField("name");//这里必须调用getDeclaredFiedl();
              fieldDec.setAccessible(true);//是否取消java的语法检查,因为此变量是私有的,如果不取消则无法赋值
              Object obj1=clz.newInstance();
              fieldDec.set(obj1, "樊康康");
              System.out.println(fieldDec.get(obj1));

(2)根据类模板对象获取类中所有的方法
        Class clz =Class.forName("day_29_ReflectAndJson.Person");
        //前面获取本类及其父类共有的方法就不再写了 直接获得本类中的所有方法 并传参数后调用本方法
        Method[] method=clz.getDeclaredMethods();//获得本类所有的方法
        for(Method meth:method)
        {
            int modifiers=meth.getModifiers();
            String modifier=Modifier.toString(modifiers);
            Class returnType=meth.getReturnType();
            String name= meth.getName();
            Class[] parm=meth.getParameterTypes();
            System.out.println(modifier+" "+returnType+" "+name+" "+parm);
        }
        //调用方法
        Method DecMethod=clz.getDeclaredMethod("run", String.class);//得到本类中的一个私有方法
        Object obj=clz.newInstance();//生成本类对象
        DecMethod.setAccessible(true);//取消语法检查
        DecMethod.invoke(obj, "这是run方法");//调用此方法,第一个参数为注明此方法在哪个类中,第二个参数为方法中需要传入的形参

(3)根据类模板对象获取类中指定参数的构造函数
Class clz=Class.forName("day_29_ReflectAndJson.Person");
        // 利用反射获得构造函数
        Constructor[] constructor=clz.getConstructors();//获得所有构造方法
        for(Constructor con:constructor)
        {
             int modi=con.getModifiers();
             String modifier=Modifier.toString(modi);
             String name=con.getName();
             Class[] parm=con.getParameterTypes();
             System.out.println(modifier+" "+name+" "+parm);
        }
        
         Constructor constructor1=clz.getConstructor(String.class);//获得一个构造方法,String.class 表明此构造函数带一个String类型的构造函数
         Object obj= constructor1.newInstance("你好构造函数");
         System.out.println(obj);


如何快速掌握 Java 反射之获取类的字段? 上一期我们提到过反射(Reflection),给大家讲解的是它的一个重要特性:动态代理。学过 Java 的小伙伴都知道,反射是Java中的一项强大的功能,它允许程序在运行时动态地获取类的信息、访问类的构造方法、字段、方法等。Java 的反射机制使得我们能够在运行时检查和操作类的属性和行为,通常用于框架、库、工具等需要动态处理对象的场景,对吧(温习一遍)。而在这篇文章中,我们将深入探讨 如何在Java 中运用反射机制进行“字段访问”? 阅读详情

相关推荐

VI恒流源原理详细分析(0~10V转0/4~20mA)

但是此电阻也不能无限增加,首先我们所列方程均是基于运放虚短虚断的假设,此假设又是基于运放输入阻抗无穷大,输出阻抗无穷小的前提条件,然而实际的运放并非理想运放,对于TL082IDR这款运放,其Rid(Common-mode input resistance)典型值为1TΩ,以此来看感觉1MΩ确实还不是很大,但是还有另一个影响因素需要考虑,那就是电路的抗干扰能力,原则上,电阻越大受到外部干扰的可能性越大。也就是实现Uin 0~10V变化时对应Iout 0~20mA的一个线性对应关系。

IOTBOT的博客 2900

根据入参通过反射获取入参字段名及对应的值

public BaseApiReturnJson CommonMethod(Dto pDto){ Field[] fields = pDto.getClass().getDeclareFields(); try{ for( int i = 0 ; i < fields.length() ; i++){ //根据入参循环取出对应类的属性名及值 ...

futao127的博客 2504

(35)远程识别(又称无人机识别)(一)

Ardupilot官网关于《Peripheral Hardware》的翻译 —《(35) 远程识别(又称无人机识别)》。

无人机开发(开源Ardupilot) 4万+

Java通过反射获取指定类型的变量

在系统API中,通常会定义一些int类型的静态变量,表示一些类型,而我们得到一个int值时,我想知道这个值对应的是哪个类型,就需要拿这个值去静态变量那里比较,很是麻烦,所以就想通过反射得到所有的静态变量,然后用代码帮我找出那个对应的变量名,示例如下: public class MediaType { public static int MP3 = 0x2348; public static int MP4 = 0x2315; public static int AVI = 0x435

Android菜鸟的专栏 1886

AGV、RGV、四向车openTCS调度系统(三)车辆适配器解读,封装自己的适配器

AGV、RGV、四向车调度。理解适配器的整体作用,以及如何使用官方例子改造自己的适配器,

要这头发有何用 3612

安卓手机必备:Auto.js快手极速版自动刷视频避坑指南(含最新3.0脚本)

本文是一份安卓自动化工具Auto.js的全面实践指南,重点解析了如何搭建稳定运行环境、配置关键权限以及管理脚本。针对快手极速版等应用的自动化需求,文章详细介绍了设备选择、Auto.js版本对比、各品牌手机后台保活设置,并强调了脚本安全与调试技巧,帮助用户有效避坑,实现自动化任务的稳定执行。

i7j8k9l的博客 782

Java反射之——Java获取类中成员变量和构造函数的信息

我们无论是获取成员变量信息,亦或者是获取构造函数的信息,都必须获取类的类类型,然后通过类的类类型进行对成员变量和构造函数的操作。 注:成员变量和构造函数也都是对象,前者是Feild的对象,在java.lang.reflec.Feild中封装了对成员变量的信息。后者是Constructor的对象,在java.lang.reflec.Constructor中封装了对构造函数的信息。 一、获取类中成...

off_white的博客 1024

基于STM32的浴室环境智能控制系统设计

摘要:本文设计了一款基于STM32F103的智能卫浴系统,通过多传感器协同检测浴室环境参数。系统采用DS18B20检测环境与卫浴温度,DHT11监测湿度,MQ-135检测空气质量,光敏电阻测量光照强度,D203S人体热释电模块检测人员存在。当检测到异常参数时,系统自动启动相应调节功能:温度异常时控制加热/制冷继电器,湿度过高时启动通风除湿,空气质量差时进行换气,光照不足且有人时自动开灯。系统支持按键、蓝牙APP和语音三种控制方式,可手动设置参数阈值、切换防雾模式、控制音乐播放等功能。实验结果表明,该系统能有

3254968421的博客 483

Kotlin 运算符

Kotlin 运算符 1. kotlin 单目运算符 var field = 1 // kotlin 自增运算符 field++ ++field field.inc() // 同自增运算 // kotlin 自减运算符 field-- --field field.dec() // 同自减运算 println(field) // 1 2. kotlin 双目算术运算符 var a = 3 val b = 4 var result = 0 result = a + b // 7,同a.plus

William的博客 1358

最新Codex接入DeepSeek官方API教程(无需cc-switch)

最新Codex接入DeepSeek官方API教程(无需cc-switch)

猿小白的博客 947

LVGL core theme主题管理(lv_theme.c)

如果打开宏,主题的初始化是在显示设备注册时完成的。整个themes的实现放在目录下面。这里一共有三套主题(basic、default和mono)可供选择或者参考。源码中默认对接的是 default 主题,所以在中,看到的是调用default主题的接口。也就是说,如果需要更换主题,把这里面的接口换掉就可以了。或者要重新做一套主题,参考这些实现修改也就可以了。虽说有三套主题,但逻辑流程是一样的。主要完成两个工作:构造lv_theme_t结构体和初始化默认样多备用(style_init函数内实现)。构造。....

Bigan(安)的博客 3411

Java反射机制demo(三)—获取类中的构造函数

Java反射机制demo(三)—获取类中的构造函数 1,获取类中所有的构造函数 如下面的代码中所示,这个类中显式的构造函数有五个。 空构造: public UserInfo() 带参构造有四个: public UserInfo(int userId) private UserInfo(String name) protected UserInfo(int userId...

weixin_30590285的博客 236

STM32cubeMX配置FreeRTOS软件定时器

文章目录前言1.软件定时器概述一.软件定时器特性二、使用cubeMX生成软件定时器总结 前言 本文主要带大家了解什么是软件定时器,并且带大家使用cubeMX配置软件定时器。 1.软件定时器概述 一.软件定时器特性 软件定时器就是一个闹钟当时间到了就执行相对应的任务或者代码。软件定时器是基于系统滴答中断的。在FreeRTOS中我们可以设置无数个软件定时器。 指定时间:启动定时器和运行回调函数,两者的间隔被称为定时器的周期 (period)。 指定类型定时器有两种类型: 1.一次性 这类定时器启动后,它的回调函

m0_49476241的博客 6949

Java 反射机制

Java 反射机制是在运行状态中,对于任意一个类,都能够获得这个类的所有属性和方法,对于任意一个对象都能够调用它的任意一个属性和方法。这种在运行时动态的获取信息以及动态调用对象的方法的功能称为Java 的反射机制。     Class 类与java.lang.reflect 类库一起对反射的概念进行了支持,该类库包含了Field,Method,Constructor类(每个类都实现了Member

点滴记录 2万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Java中Class类和反射机制

一般用来解决Java 程序运行期间,对某个实例对象一无所知的情况下,如何调用该对象内部的方法问题Reflection(反射)是被视为动态语言的关键,反射机制允许程序在运行期间借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构。

2301_79561226的博客 1386

pscad IEEE标准系统搭建说明

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

Java反射机制详解

在Java中,反射(Reflection)是指在运行时检查、访问和修改类、接口、字段和方法等程序结构的能力。Java反射机制允许程序在运行时获取任何类的内部信息,并且能够直接操作任意对象的内部属性及方法。简单来说,反射就是把Java类中的各种成分(构造方法、成员变量、方法等)映射成相应的Java类,并在运行时动态地获取类信息以及操作类的对象。Java的反射机制使得我们可以在程序运行时:Java反射API主要由以下几个类组成,它们都位于包中:下面是一个简单的反射示例,展示了如何获取类的信息并调用方法: 执行结

yk_dflkg的博客 1180

Java反射机制访问类私有方法和变量

Java反射机制访问类私有方法和变量背景利用Java的反射机制,可以得到运行时的类信息(RTTI),与传统RTTI不同的是,反射可以在运行时才得到.class文件,从而打开和检查.class文件,所有Java的反射具有很强的灵活性。反射提供了一种机制——用来检查可用的方法,并返回方法名,当然也可用得到域变量成员等其他信息。通过反射机制获得变量的私有方法和变量理论上是可行的,而且步骤非常简单,本文将结

kimixuchen的专栏 3216

Java反射机制

是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射机制。简单来说,反射机制指的是程序在运行时能够获取自身的信息。在Java中,只要给定类的名字,就可以通过反射机制来获得类的所有信息。

#helloworld的博客 943

Java的反射机制

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

晓的博客 1287

Java反射机制的原理和用途

转:https://blog.youkuaiyun.com/Appleyk/article/details/77879073 看了好多关于Java反射机制的文章,大多都太过官方,消化起来比较稍显费劲,本篇,我会依据自己的理解去阐述什么是Java的反射机制,反射用在什么地方,以及怎么来使用? 开篇前,我们还是要了解一下,什么是Java的反射机制: “程序运行时,允许改变程序结构或变量类型,...

lin20080410的专栏 4166

利用Java的反射操作一个类的所有构造函数、字段、方法

一,问题 今天看Spring AOP的时候,有涉及Java的反射机制。想到自己这方面很久没碰了,就去玩一下。想不到反射真的强大的,哈哈哈!!!文章最后面有源代码。 二,解决方案 2.1 利用获取Class类的三种方式 ①通过全限定名: Class c = Class.forName("top.kolo.polo.User"); ②通过类名: Class c = User....

KOLO的博客 702

java反射机制

Java 反射机制是 Java 语言中的一个重要特性,它允许程序在运行时获取和操作类的信息,包括类的构造函数、方法、字段等,并且能够动态地创建对象、调用方法和访问字段。

2403_87486006的博客 906
上一篇: XML的几种解析方式,及其代码实现
下一篇: JSON解析----个人学习笔记
AlwaysDebug
博客等级 码龄11年 2粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值