java反射机制-Class类-Class对象的获取

避坑指南:PCIe设备兼容性那些坑——聊聊MPS/MRRS设置不当引发的血泪史 本文深入探讨了PCIe设备兼容性问题,特别是MPS/MRRS参数设置不当引发的常见故障。通过详细解析MPS(Max Payload Size)和MRRS(Max Read Request Size)的作用机制,提供Linux内核五大配置策略的对比分析,并分享FPGA加速卡等实战案例的排查经验。文章还介绍了诊断工具链、动态调试技巧以及性能优化方法,帮助工程师有效解决PCIe兼容性难题。 阅读详情

java.lang.Class是一个比较特殊的类,它用于封装被装入到JVM中的类(包括类和接口)的信息。

当一个类或接口被装入的JVM时便会产生一个与之关联的java.lang.Class对象,可以通过这个Class对象对被装入类的详细信息进行访问。

简单的说,获取某一个类所对应的Class对象可以通过如下三种途径:

1. Object的getClass方法

java.lang.Object中定义有getClass方法:

public final Class getClass()

所有Java对象都具备这个方法。该方法用于返回与调用该方法对象所属类关联的Class对象,例如:

Date date1 = new Date();

Date date2 = new Date();

Class c1 = date1.getClass();

Class c2 = date2.getClass();

System.out.println(c1.getName()); // java.util.Date

System.out.println(c1 == c2); // true

上面的代码中,调用Date对象date1的getClass方法将返回用于封装Date类信息的Class对象。这里调用了Class类的getName方法:

public String getName()

这个方法的含义很直观,即返回所封装的类的名称。

需要注意的是,代码中的date1和date2的getClass方法返回了相同的Class对象(c1==c2的值为true)。这是因为,对于相同的类,JVM只会载入一次,而与该类对应的Class对象也只会存在一个,无论该类实例化了多少对象。

另外,需要强调的是,当一个对象被其父类的引用或其实现的接口类型的引用所指向的时,getClass方法返回的是与对象实际所属类关联的Class对象。例如:

List list = new ArrayList();

System.out.println(list.getClass().getName()); // java.util.ArrayList

上面的代码中,语句list.getClass()方法返回的是list所指向对象实际所属类java.util.ArrayList对应的Class对象而并未java.util.List所对应的Class对象。有些时候可以通过这个方法了解一个对象的运行时类型,例如:

HashSet set = new HashSet();

Iterator it = set.iterator();

System.out.println(it.getClass().getName()); //java.util.HashMap$KeyIterator

从代码可以看出,HashSet的iterator方法返回的是实现了Iterator接口的HashMap内部类(KeyIterator)对象。

因为抽象类和接口不可能实例化对象,因此不能通过Object的getClass方法获得与抽象类和接口关联的Class对象。

2. 使用.class的方式

使用类名加“.class”的方式即会返回与该类对应的Class对象。例如:

Class clazz = String.class;

System.out.println(clazz.getName()); // java.lang.String

这个方法可以直接获得与指定类关联的Class对象,而并不需要有该类的对象存在。

3. 使用Class.forName方法

Class有一个著名的static方法forName:

public static Class forName(String className) throws ClassNotFoundException

该方法可以根据字符串参数所指定的类名获取与该类关联的Class对象。如果该类还没有被装入,该方法会将该类装入JVM。

该方法声明抛出ClassNotFoundException异常。顾名思义,当该方法无法获取需要装入的类时(例如,在当前类路径中不存在这个类),就会抛出这个异常。

例如,如果当前类路径中存在Foo类:

package org.whatisjava.reflect;

public class Foo {

    public Foo() {

       System.out.println("Foo()");

}

    static {

       System.out.println("Foo is initialized");

    }

}

运行下面的代码:

Class clazz = Class.forName("org.whatisjava.reflect.Foo");

控制台会有如下输出:

Foo is initialized

Class.forName("org.whatisjava.reflect.Foo")首先会将reflection.Foo类装入JVM,并返回与之关联的Class对象。JVM装入Foo类后对其进行初始化,调用了其static块中的代码。需要注意的是:forName方法的参数是类的完整限定名(即包含包名)。

区别于前面两种获取Class对象的方法。使用Class.forName方法所要获取的与之对应的Class对象的类可以通过字符串的方式给定。该方法通常用于在程序运行时根据类名动态的载入该类并获得与之对应的Class对象。

Abaqus 单元与全局刚度矩阵导出实战指南:从INP修改到结果解析 本文提供了Abaqus中导出单元刚度矩阵和全局刚度矩阵的完整实战指南。通过详细步骤讲解INP文件修改、关键指令插入及结果文件解析,帮助工程师、研究人员和二次开发者深入理解有限元软件内核,实现理论验证、二次开发与深度问题调试。 阅读详情

相关推荐

STM32H7串口DMA避坑指南:如何解决RT-Thread默认驱动不支持的问题

本文针对STM32H7在RT-Thread系统中启用串口DMA时遇到的驱动不支持问题,提供了详细的解决方案。通过分析问题根源,指导修改驱动代码以适配H7的DMA Stream架构,并调整内存配置确保DMA可访问性,最终实现稳定高效的串口DMA通信。

weixin_29179311的博客 424

【Java】反射基础(Class类)

主要介绍反射的基础Class类、以及它的内部类Field类、Method类。以及简单介绍了反射。

摸鱼小小虫的博客 1494

西门子 S7-200 SMART 系列六:手把手教你配置S7-200 SMART Modbus RTU

最新发表:https://www.ics-pedia.com/%e8%a5%bf%e9%97%a8%e5%ad%90-s7-200-smart-%e7%b3%bb%e5%88%97%e5%85%ad%ef%bc%9a%e6%89%8b%e6%8a%8a%e6%89%8b%e6%95%99%e4%bd%a0%e9%85%8d%e7%bd%aes7-200-smart-modbus-rtu%e5%ae%9e%e4%be%8b/

John_09040211的博客 3279

反射机制-Class类-Class对象的获取

[size=small]java.lang.Class是一个比较特殊的类,它用于封装被装入到JVM中的类(包括类和接口)的信息。 当一个类或接口被装入的JVM时便会产生一个与之关联的java.lang.Class对象,可以通过这个Class对象对被装入类的详细信息进行访问。 简单的说,获取某一个类所对应的Class对象可以通过如下三种途径: 1. Object的getClass方法 jav...

既然失败被认为是清醒剂,就不要让成功成为迷魂汤 275

LangChain学习及应用(超详细)

Model I/O 部分是与语言模型进行交互的核心组件,包括输入提示(Prompt Template)、调用模型(Model)、输出解析(Output Parser)。简单来说,就是输入、处理、输出这三个步骤。LLM 因其具有海量参数,需要花费相当的物力与时间成本进行预训练和微调,同时商用 LLM 还需要进行各种安全测试与风险评估等。因此 LLM 会存在知识滞后的问题。在专有领域,LLM 无法学习到所有的专业知识细节,因此在面向专业领域知识的提问时,无法给出可靠准确的回答。

weixin_39764056的博客 4257

基于74LS175的四人抢答电路设计(含详细设计分析及试错过程)

根据设计要求不难发现,只要有一人抢答,就会输出信号使指示灯常亮,此时其他人输入无效,适宜选择触发器,有人抢答时触发器输出由0变1,输出信号控制指示灯常亮,同时使CLR引脚输入0,触发器不工作,即其他选手不能再抢答。尝试加入一人抢答后其他人不可抢答功能,如下图,175四个~Q输出端接入同一个与非门,于是当有选手抢答时该与非门输出由0变1,将该信号输入U5A,U5A输出由1变0,接入~CLR即可使电路不再工作。但仿真时发现,该复位键仅可使抢答电路部分复位,计数部分只是暂停,并未复位。否则元器件将无法正常工作。

2202_75463653的博客 8193

Java反射中,为什么推荐Class.forName()获取class?

一、Java反射中获取Class对象的三种方式 在Java反射中,反射的入口就是class,获取class的方式有三种 Class.class; Class.forName(); 对象.getClass() 对三者的简单理解 Class.class的形式会使JVM使用类加载器将类装入内存(前提是类还没有装入内存),不做类的初始化工作,返回Class对象。 Class.forName()的形式会装入类并做类的静态初始化,返回Class对象。 对象.getClass的形式会对类进行静态初始化

学Java,找哪吒 7474

Windows系统监控实战:Grafana+Prometheus+node_exporter保姆级配置指南(含常见问题解决)

本文提供了一份详尽的Windows系统监控实战指南,详细讲解了如何从零部署Grafana、Prometheus和node_exporter(实际为windows_exporter)监控栈。内容涵盖核心组件认知、分步配置解析、高级生产环境考量,并重点针对配置过程中常见的“No Data”问题提供了系统性的排查手册,旨在帮助用户快速搭建稳定可靠的系统资源监控平台。

weixin_29197835的博客 1008

【Java笔记】反射机制(Class)

Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于 Reflection API 取得任何类的内部信息,并能直接操作任意对象的内部属性及方法 目录 反射的概念 动态语言与静态语言 动态语言 静态语言 Java反射机制提供的功能 反射类的应用 如何看待反射与封装性 反射的概念 加载完类之后,在堆内存的方法区中就产生了一个 Class 类型的对象(一个类只有一个 Class 对象),这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构。这个

lijibai_的博客 543

数字孪生实战:如何用Blender+Unity快速搭建未来工厂3D模型(附资源包)

本文提供了一套利用Blender进行三维建模,再结合Unity构建虚拟仿真环境的实用方案,旨在帮助中小型制造企业低成本、高效率地搭建未来工厂数字孪生原型系统。文章详细介绍了从数据规划、模型优化到场景构建、逻辑仿真与数据对接的全流程,并附有资源包,助力技术团队快速实现从静态展示到动态交互的数字孪生应用。

weixin_29191669的博客 339

Raspberry Pi Pico + Inmp441麦克风(Pio模拟I2s)<2>

摘要:本文介绍了在Raspberry Pi Pico上使用PIO(Programmable I/O)接收I2S数字麦克风音频数据并保存为WAV文件的方法。项目采用双PIO状态机设计,一个生成I2S时钟信号(WS+SCK),另一个接收24位左声道数据并转换为16位格式。文章详细说明了接线方式、参数设置、WAV文件头构造、PIO汇编程序实现以及数据转换处理流程。项目在MicroPython环境下实现16kHz采样率、6秒时长录音,具有时序精确、稳定可靠的特性,并提供了进一步拓展的可能性,如双声道支持、实时频谱分

技术需要沉淀,需要碰撞。 660

java 反射调用方法时获取bean失败解决方案

反射调用方法时获取bean失败 Service service = (Service)Class.forName("com.service.TestService").newInstance();// 加载类,并实例化对象 Method objMethod = service.getClass().getDeclaredMethod("test");//获取方法 objMethod.invoke(service);//执行方法 通过反射机制调用TestServiceImpl实现类的test方法时,Test

Marlene_me的博客 2430

SpringBoot项目搭建

SpringBoot项目搭建

私信可回答各种问题~ 1025

【Java 19】反射 - 反射机制概述、获取Class实例、类的加载与ClassLoader的理解、创建运行时类的对象、获取运行时类的完整结构、调用运行时类的指定结构、动态代理

反射 Class clazz1 = Class.forName("com.wmiao.java.Person"); //Class clazz1 = Person.class; Person p1 = (Person) clazz1.newInstance(); 1 Java反射机制概述 1.1 Java Reflection介绍 1.2 动态语言 vs 静态语言 1.3 Java反射机制研究及应用 1.4 Java反射主要API 1.5 代码实例 package com.wmiao.java

Wmiao 300

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

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...

【第十五章 java反射机制,获取Class类的实例,创建运行时类的对象,调用运行时类中指定的结构,静态代理】

第十五章 java反射机制,获取Class类的实例,创建运行时类的对象,调用运行时类中指定的结构,静态代理

qq_43742813的博客 243

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

java反射获取类的包名_Java反射机制demo(一)—实例化Class对象,并获得其他类包名和类型...

Java反射机制demo(一)—实例化Class对象,并获得其他类包名和类型使用Java中的 本地类作为实验对象,避免自定义的类带来的一些不便。public static void main(String[] args) {try{Class c1 = Class.forName("java.lang.Integer");System.out.println(c1.getName());}catc...

weixin_42548961的博客 333

java的动态性的介绍_反射机制_获取class对象的方法_获得类信息的方法_day_37;

1.java 的动态性包括:反射机制,动态编译,动态执行JavaScript,动态字节码的操作;2.动态语言:Java可以被称之为  准动态语言;3. reflection :4.Class 这个类:5.获得 class 对象的方法:package Test; /** * * 用来测试获取class对象的类 * * @author Wang * */ public class S...

qq_38053395的博客 866

Java的反射机制(类的加载过程、Class类&获取Class类实例(4种)、创建运行时类的对象&获取运行时类的完整结构)

Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。 ​  加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象就包含了完整的类的结构信息,这个过程叫做反射。

斗鹰的技术专栏 1348

反射获取类_Java反射机制-获取类对象

Java程序在Java虚拟机运行的时候,会通过虚拟机进行一次类似读取信息的操作。Java虚拟机会通过编译好的.class文件,来获取类信息。Java反射机制就是模拟这样的一个流程来让我们在运行的过程中可以知道类的信息。Java反射机制的两个常见的类: Class 和ClassLoaderClass类主要是获取类的信息和操作类。ClassLoader主要是加载类到虚拟机上,就是类加载器。在程序运...

weixin_39626089的博客 62

【注解与反射】什么是注解 内置注解 元注解 Java反射机制概述 理解Class类并获取Class实例 实体类 类的加载与ClassLoader 类加载器的作用 创建运行时类的对象 反射操作泛型注解

/什么是注解 public class Test01 extends Object {// @Override 重写的注解 @Override public String toString() {//重写方法 return super . toString();} //Deprecated 不推荐从程序员使用,但是可以使用,或者存在更好的方式 @Deprecated public static void test() {test();//什么是注解。

2301_82009801的博客 32

[1-01-01].第70节:反射机制 - 分析Class类与使用

要想解剖一个类,必须剖析一个类或用反射解决具体的问题就是使用相关API:java.lang.Class和`java.lang.reflect.*,所以。

F-T-er 1035

Java反射机制

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

2303_77640525的博客 2188

Java-反射机制(超详解)_java反射机制

新星计划,等你来造,一起学习进步!点击跳转活动奖励:❀【新秀奖】新注册用户发布第一篇文章(500字以上)获得电子【新秀勋章】;❀【基础奖】完成任务挑战用户可获专属电子勋章(潜力新星)+抽奖机会(百分百中奖)❀【特别奖】各导师评选团队综合top5,获实力新星实体证书/实体奖牌红色款二选一+APP作者推荐关注+实力(1)Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期 借助于ReflectionAPI取得任何类的内部信息,并能直接操作任意对象的内 部属性及方法。

2501_90250883的博客 1444

获取class属性_反射机制介绍_Class对象获取

1、反射机制是 Java 的动态性之一 动态语言:在程序运行时,可以改变程序的结构或变量的类型。 举例:JavaScript :<html> <head> <title>js代码</title> <script> function test(){ var s = "var a = 3; var b = 4; ale...

weixin_35976825的博客 503

Java笔记040-反射/反射机制、Class类

Class也是类,因此也继承Object类【类图】Class类对象不是new出来的,而是系统创建的【演示】对于某个类的Class类对象,在内存中只有一份,因为类只加载一次【演示】每个类的示例都会记得自己是由哪个Class实例所生成的通过Class可以完整地得到一个类的完整结构,通过一系列的APIClass对象是存放在堆的类的字节码二进制数据,是放在方法区的,有的地方称为元数据(包括 方法代码,变量名,方法名,访问权限等等)【示意图】

qq_59621600的博客 319

Java 中 Class 类的基本用法详解

Class类是 Java 反射的基础,每个类在 JVM 中都有一个对应的Class对象它存储了类的完整信息:类名、父类、接口、方法、属性、构造函数等Class对象由 JVM 自动创建,一个类在 JVM 中只有一个Class实例Class类是 Java 反射的基石,它提供了一套完整的 API 来访问类的元数据。掌握Class如何获取Class对象(三种方式的区别与适用场景)如何通过Class对象获取类的结构信息(属性、方法、构造函数等)如何利用Class。

abluckyboy的博客 543

反射获取类_Java核心知识 基础二 JAVA 反射

1. 动态语言 动态语言,是指程序在运行时可以改变其结构:新的函数可以引进,已有的函数可以被删除等结 构上的变化。比如常见的 JavaScript 就是动态语言,除此之外 Ruby,Python 等也属于动态语言, 而 C、C++则不属于动态语言。从反射角度说 JAVA 属于半动态语言。2. 反射机制概念 (运行状态中知道类所有的属性和方法)在 Java 中的反射机制是指在运行状态中,对于任意一个...

weixin_34698121的博客 87
上一篇: 造成死锁的原因和解决方案
下一篇: Spring对注解(Annotation)处理源码分析1——扫描和读取Bean定义
superbsoftware
博客等级 码龄15年 6粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值