Java.lang.reflect简单讲解

S-function入门及案例详解(1)——S-function基础介绍及基本案例 本专题将用三篇文章对S-function进行介绍及其案例详解。欢迎关注~ 目录一、S-Function简介二、详解sfuntmpl函数2.1 sfuntmpl函数介绍2.2 mdlInitializeSizes函数2.3 mdlDerivatives函数2.4 mdlUpdate函数2.5 mdlOutputs函数2.6 mdlGetTimeOfNextVarHit函数2.7 mdlTerminate函数三、案例1——对波形的幅值进行放大3.1 案例分析3.2 案例详解3.3 输出波形四、案例2——对波形的 阅读详情

在Java运行时刻,能否知道一个类的属性方法并调用改动之?对于任意一个对象,能否知道他的所属类,并调用他的方法?答案是肯定的。这种动态的获取信息及动态调用方法的机制在Java中称为“反射”(reflection)。

Java反射机制主要提供以下功能:

在运行时判断任意一个对象所属的类;
在运行时构造任意一个类的对象;
在运行时判断任意一个类所具有的成员变量和方法;
在运行时调用任意一个对象的方法。

      Reflection 是Java被视为动态(或准动态)语言的一个关键性质。这个机制允许程序在运行时透过Reflection APIs取得任何一个已知名称的class的内部信息,包括其modifiers(诸如public, static 等等)、superclass(例如Object)、实现之interfaces(例如Serializable),也包括fields和methods 的所有信息,并可于运行时改变fields内容或调用methods。

一般而言,开发者社群说到动态语言,大致认同的一个定义是:“程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”。

在JDK中,主要由以下类来实现Java反射机制,这些类都位于java.lang.reflect包中:
Class类:代表一个类;
Field 类:代表类的成员变量(成员变量也称为类的属性);
Method类:代表类的方法;
Constructor 类:代表类的构造方法;
Array类:提供了动态创建数组,以及访问数组的元素的静态方法;

Class

       在java.lang.Object 类中定义了getClass()方法,因此对于任意一个Java对象,都可以通过此方法获得对象的类型。Class类是Reflection API 中的核心类,它有以下方法:
getName():获得类的完整名字;
getFields():获得类的public类型的属性;
getDeclaredFields():获得类的所有属性;
getMethods():获得类的public类型的方法;
getDeclaredMethods():获得类的所有方法;

getMethod(String name, Class[] parameterTypes):获得类的特定方法,name参数指定方法的名字,parameterTypes 参数指定方法的参数类型;

getConstructors():获得类的public类型的构造方法;
getConstructor(Class[] parameterTypes):获得类的特定构造方法,parameterTypes 参数指定构造方法的参数类型;
newInstance():通过类的不带参数的构造方法创建这个类的一个对象;

         Class class十分特殊。它和一般classes一样继承自Object,其实体用以表达Java程序运行时的classes和interfaces,也用来表达enum、array、primitive Java types(boolean, byte, char, short, int, long, float, double)以及关键词void。当一个class被加载,或当加载器(class loader)的defineClass()被JVM调用,JVM 便自动产生一个Class object。如果您想借由“修改Java标准库源码”来观察Class object的实际生成时机(例如在Class的constructor内添加一个println()),不能够!因为Class并没有public constructor
         Class是Reflection起源。针对任何您想探勘的class,唯有先为它产生一个Class object,接下来才能经由后者唤起为数十多个的Reflection APIs
 
Class的取得途径
        Java允许我们从多种途径为一个class生成对应的Class object

(一)运用getClass()方法:
String str = "abc";
Class class = str.getClass();


(二)运用Class.getSuperclass()方法:
Button b = new Button();
Class c1 = b.getSuperclass();

(三)运用静态方法Class.forName(),这个最常用:
Class c2 = Class.forName("java.util.Date");

(四)运用.class语法:
Class c1 = String.class;

(五)运用原始包装类的TYPE方法:
Class c1 = Character.TYPE;

运行时生成instances

欲生成对象实体,在Reflection 动态机制中有两种作法,一个针对“无自变量ctor”,一个针对“带参数ctor”。如果欲调用的是“带参数ctor“就比较麻烦些,不再调用Class的newInstance(),而是调用Constructor 的newInstance()。首先准备一个Class[]做为ctor的参数类型,然后以此为自变量调用getConstructor(),获得一个专属ctor。接下来再准备一个Object[] 做为ctor实参值,调用上述专属ctor的newInstance()。

运行时调用methods

这个动作和上述调用“带参数之ctor”相当类似。首先准备一个Class[]做为参数类型(本例指定其中一个是String,另一个是Hashtable),然后以此为自变量调用getMethod(),获得特定的Method object。接下来准备一个Object[]放置自变量,然后调用上述所得之特定Method object的invoke()。

运行时变更fields内容

与先前两个动作相比,“变更field内容”轻松多了,因为它不需要参数和自变量。首先调用Class的getField()并指定field名称。获得特定的Field object之后便可直接调用Field的get()和set()。

 

 

 

 

【CASS精品教程】032:CASS11台阶画法案例大全 一、普通无边台阶 二、普通有边台阶 三、普通圆弧无边台阶 四、U型台阶 五、曲线U型台阶 六、L型台阶 阅读详情

相关推荐

达梦数据库集群部署(主备)

达梦数据库集群部署(主备)

m0_71845127的博客 1461

深入浅出系列之JAVA反射(java.lang.reflect及Class类详解)

JAVA反射 获取class对象引用的三种方式 Object类中的getClass()方法,object.getClass(); 通过对象静态属性 .class来获取对应的Class对象(类字面常量) Class.forName("") import cn.easycode.mycode.po.Student; public class Solution { public static void main(String[] args) { Student stu = new Stude

TK_lTlei的博客 4003

企业微信会话存档SDK集成与动态库加载实战

本文详细解析了企业微信会话存档SDK的集成与动态库加载实战,重点解决Windows与Linux环境下动态库加载的差异问题。通过实战案例和优化建议,帮助开发者高效完成企业微信API集成,确保合规存档功能稳定运行。

weixin_26934905的博客 464

Java 反射(Reflection)

Java 反射(Reflection)是一个强大的特性,它允许程序在运行时查询、访问和修改类、接口、字段和方法的信息。反射提供了一种动态地操作类的能力,这在很多框架和库中被广泛使用,例如Spring框架的依赖注入。

m0_47498690的博客 1127

手把手教你用STM32F103C8T6驱动HUB75 LED点阵屏(附74HC595级联代码)

本文详细介绍了如何使用STM32F103C8T6开发板驱动HUB75接口的LED点阵屏,包括硬件连接、74HC595级联代码、时序控制及灰度显示实现。通过实战案例展示动态文字显示和性能优化技巧,帮助开发者快速掌握LED点阵屏驱动技术。

weixin_42623010的博客 341

什么是 SAP PCE?

SAP Private Cloud Edition 是一种基于云计算的部署模式,它结合了公有云的灵活性和私有云的安全性,为企业提供了量身定制的云服务。在 PCE 环境中,SAP 托管和维护客户的应用系统(如 SAP S/4HANA、SAP SuccessFactors 或 SAP BW/4HANA),同时客户拥有更高的定制化权限。专属环境:每个客户在云中拥有独立的资源,这保障了更高的安全性和性能。全面托管:SAP 提供基础架构、系统管理和更新服务,降低了客户的运维成本。灵活扩展。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2242

java.lang.reflect包简析

    java.lang.reflect是“反射”包,其中定义了各个元数据的类。其继承关系如下图所示: 一、最底层的接口     几个蓝色色框中,定义了最底层的几个接口:     AnnotatedElement接口,这个接口中的方法,用来获取元素上的注解(如果是在框架中,通常是被定义为“运行时可见”的注解)。可以被注解的元素均继承了这个接口,如Method、Field、Class等。...

muddledape的博客 1919

基于LED可见光通信的物联网系统设计_344

随着物联网技术的不断发展,传统无线通信在工业环境中面临电磁干扰强、通信质量不稳定等问题。为此,本文设计了一种基于LED可见光通信的物联网系统,实现工厂车间内设备状态的稳定、高效、低干扰数据传输。系统主要由设备节点、设备主机、华为云物联网服务器以及可视化上位机构成。 设备节点采集机器的出货量、运行状态、机身温度等关键信息,通过调制后的LED可见光信号发送至设备主机。主机利用红外接收器接收光信号后进行解调处理,并通过WIFI模块将数据上传至华为云IOT服务器。

344

Java基础 -> abstract关键字(抽象的)

abstract修饰类,方法 ①abstract修饰类 abstract修饰的类必须有子类,可以接下来实例化。 这是类中没有abstract方法时。 public class Bs{ public static void main(String[] args){ As asd = new As(); //错误,abstract修饰的类不能实例化(new); } } abstract class As{ } ②abstract修饰方法 类中有abstract方法,子类中要想实例化,就需要重写

rod0320的博客 385

有限元之有限元空间的构造

主要介绍有限元的空间构造方法。

欢迎各位大佬光临“寒舍”!请多多指点,共同进步! 762

RK3568-适配phy芯片ip101gri

复位时间查阅数据手册。

Paper_Love的博客 2643

Java.lang.reflect 包下常用的类及方法简介

Class类之主要方法简介  Class<?> cls = String.class;  一)类自身的信息 1. 包路径    cls.getPackage(); 2. 类名      cls.getName();cls.getSimpleName(); 3. 类修饰符  cls.getModifiers(); 4. 类属性    cls.getFields();cl...

知行天下 877

使用python中pypower进行电力潮流计算

使用python中pypower进行电力潮流计算

总裁余(余登武)博客 4861

Spring反射机制

对于反射的机制的理解和记录,什么是反射,如何使用,应用场景是什么……

yf3241610146的博客 1117

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

java.lang.reflect包_【Java公开课|java.lang.reflect 包是什么,如果你不知道,你怎么做好Java呢】- 环球网校...

【摘要】作为一门面向对象编程语言,Java吸收了C++语言的优点,也展现了其强大的一面,我们能在各个地方看到其功能强大和简单易用的两个特征,当然,也吸引了很多程序员的注意力,所以就有人想了解Java的相关内容,今天就来讲讲java lang reflect 包的相关内容。java.lang.reflect 包提供了反射中用到类,主要的类说明如下:Constructor 类:提供类的构造方法信息。F...

weixin_42452301的博客 148

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

【Java】java.lang.reflect.Type详解

Type简介 获取Class的接口实现和类继承信息 数组的Class与Type 获取Field的字段类型 ParameterizedType Gson泛型解析原理 模拟Gson的TypeToken类存储泛型信息 TypeToken写法优化

天天向上 Up Up Up (*^▽^*) 8825

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Java反射之java.lang.reflect.Field

前面一章 讲了怎么通过Class获取到成员(成员变量、成员方法、构造器),本篇文章开始详细讲解成员变量(java.lang.reflect.Field)的详细用法。获取field的类型有两种方式可以获取到field的属性,Field.getType()和Field.getGenericType(),其中getGenericType可以获取到泛型的标识符,如果这个field是泛型,则返回泛型的标识,如

feigeswjtu的专栏 7008

Java反射(java.lang.reflect)

什么是Java反射 Java反射是一种可以让我们在代码运行的时候,动态地获取我们想要创建实例的类信息,使用获得到的类的信息来获得一个程序执行时的对象的一种方法,也就是说,使用反射这种方法,我们不需要在代码中指明我们想要创建什么类型的实例,而是让代码自动地去获取我们想要创建的实例的它的类的信息,这样做,我们可以极大程度地降低程序的耦合程度。 反射是一种方法,那么举一反三,我们使用这个思路可以获得类的...

贪吃小明的博客 7341

Java反射之java.lang.reflect.Constructor

我们知道每个类都至少有一个构造器,因为一个类如果没有显示定义一个构造器,编译器自动会自动生成一个默认无参的构造器,构造器作为一个类的入口方法,在使用类的成员变量和方法之前,类的构造器必须被调用,生成一个实例,另外构造器不能被继承,如果子类的构造器没有显示的调用父类的构造器,执行器会默认的调用父类的构造器。 说了这么多,我们该进入正题了,本文讲解一个反射中怎么获取一个构造器的声明、参数等信息,怎么

feigeswjtu的专栏 6046

java.lang.reflect.Field 解读

java.lang.reflect.Field 解读

老顽固也可爱 2105

【Java】已解决:java.lang.reflect.MalformedParameterizedTypeException

泛型在Java中是一个强大的工具,用于实现类型安全和重用性。但当开发者试图通过反射访问泛型参数化类型的信息时,如果泛型的定义或使用不符合规范,就会触发这个异常。它通常出现在处理泛型类型时,尤其是涉及反射操作时。本文将详细介绍该异常的背景、可能的原因,并通过错误与正确代码示例帮助读者理解如何避免和解决这一问题。要解决这个问题,我们需要确保在使用反射时,类型的定义是正确的,并且泛型类型的信息能够正确地被解析。异常,提高代码的稳定性和健壮性。在Java反射机制的使用过程中,的泛型信息时,可能会出现。

屿小夏.的知识博客 1405

java.lang.reflect.AccessibleObject

java.lang.reflect.AccessibleObject类是Field,Method和Constructor类对象的基类。 它提供了将反射对象标记为在使用它时抑制默认Java语言访问控制检查的功能。 当使用Fields,Methods或Constructors类对象来设置或获取字段,调用方法,或创建和初始化新的类实例时,执行访问分别检查(对于public,默认(包)访问,protected和private成员) 。 在反射对象中设置可访问标志允许具有足够权限的复杂应用程序(如Java对象序列化

不管风吹浪打,胜似闲庭信步 1004

java.lang.reflect反射之动态代理类 Proxy

public class Proxy extends Objectimplements Serializable Proxy提供了一组静态方法,通过这些静态方法用于创建动态代理类和实例,它还是由这些方法创建的所有动态代理类的超类。 Proxy类是专门完成代理的操作类,可以通过此类为一个或多个接口动态地生成实现类。 为某个接口创建代理Foo : InvocationHandler handler = new MyInvocationHandler(...); Class<?> pro...

ystyaoshengting的专栏 1044

Java反射Reflect中java.lang.Class类源码阅读讲解

Class类的实例对象代表的是正在运行的类或者接口的class对象;enum枚举是一种类class,注解是一种接口;每个数组也属于一个类class对象,该对象是通过反射Reflect生成的对象,该对象由具有相同元素类型和维数的所有数组共享;原生的Java类型boolean、byte、char、short、int、long、float、double和关键字void也可以表示为Class实例对象。 ...

OceanSky的专栏 1857
上一篇: Java 注解的几大作用及使用方法详解
下一篇: 利用反射操作泛型
kobejayandy
博客等级 码龄18年 2853粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值