Java的Class类:每一个类都对应着一个Class对象
Class类的基本概念
在Java中,每一个类都对应着一个Class
对象,这个Class
对象包含了类的相关信息,例如类的名称、继承关系、方法、字段、注解等信息。通过Class
对象,可以获取类的各种信息并对其进行操作。
请细品这句话:每一个类都对应着一个Class
对象,每一个类的所有对象都是由它对应的这个Class
对象创建的。
Class对象的产生
每一个类都对应着一个Class
对象,那么这个Class
对象是怎么产生的?
当类的字节码文件被加载到内存中就创建了这个类的Class
对象。
Java只有在需要使用类时,才会触发该类的加载。以下是Java中会触发类加载的情况:
-
创建一个类的实例,包括通过
new
关键字创建、反射创建、反序列化等方式。 -
访问类的静态变量或方法。
-
通过
Class.forName()
方法加载类。 -
使用
ClassLoader.loadClass()
方法加载类。 -
使用Java虚拟机启动时指定的主类会被加载和初始化。
Class类的应用场景
在Java中,Class
类的应用场景非常广泛,例如:
-
反射机制:通过
Class
对象获取类的相关信息,并在运行时动态创建对象、访问方法、字段、注解等信息。 -
类加载机制:在Java中,每一个类都是在第一次使用时动态加载到JVM中的,
Class
对象就是用来表示这个类的。 -
泛型:泛型中的T表示类型参数,可以通过Class类来获取T的实际类型。
获取Class对象
Java中有三种获取Class
对象的方法:
-
对象
.getClass()
方法:调用对象的getClass()
方法来获取Class对象。 -
类名
.class
:使用类名.class
语法来获取Class
对象。 -
Class.forName()
方法:使用Class.forName()
方法来动态加载指定类,并返回其Class对象。
常用方法
-
getName()
方法:获取类的全限定名。 -
getSuperclass()
方法:获取类的父类。 -
getDeclaredFields()
方法:获取类的所有字段,包括私有字段。 -
getFields()
方法:获取类的所有public
字段。 -
getDeclaredMethods()
方法:获取类的所有方法,包括私有方法。 -
getMethods()
方法:获取类的所有public
方法。
代码示例
public class Student {private String name;private int age;private String gender;public Student(String name, int age, String gender) {this.name = name;this.age = age;this.gender = gender;}public void study() {System.out.println(name + " is studying.");}public String getName() {return name;}public int getAge() {return age;}public String getGender() {return gender;}
}
通过上面的代码可以看出,我们定义了一个简单的Student
类,用于演示Class
类的相关操作。
获取Student
类的Class
对象的代码:
Class<Student> studentClass = Student.class;
或者通过以下代码也可以获取Student
类的Class
对象:
Student s = new Student("Tom", 20, "Male");
Class<? extends Student> studentClass = s.getClass();
以下是一些常用的Class
类方法的示例:
// 获取类名
String className = studentClass.getName();
System.out.println("Class Name: " + className);// 获取父类
Class<? super Student> superClass = studentClass.getSuperclass();
System.out.println("Superclass: " + superClass);// 获取实现的接口
Class<?>[] interfaces = studentClass.getInterfaces();
for (Class<?> interfaceClass : interfaces) {System.out.println("Interface: " + interfaceClass.getName());
}// 获取所有字段
Field[] fields = studentClass.getDeclaredFields();
for (Field field : fields) {System.out.println("Field: " + field.getName());
}// 获取所有public方法
Method[] methods = studentClass.getMethods();
for (Method method : methods) {System.out.println("Method: " + method.getName());
}
通过这些示例代码,我们可以看到如何使用Class
类的一些常用方法获取Student
类的各种信息,例如类名、父类、实现的接口、字段、方法等等。
总结
Java的Class
类是一个非常重要的类,主要用于获取类的相关信息并进行相应的操作。Class
类具有广泛的应用场景,例如反射机制、类加载机制、泛型等方面。获取Class
对象的方法有对象的getClass()
方法、类名.class
语法以及Class.forName()
方法。常用的Class
方法包括getName()
方法、getSuperclass()
方法、getDeclaredFields()
方法、getFields()
方法、getDeclaredMethods()
方法以及getMethods()
方法。
关注微信公众号:“小虎哥的技术博客”,回复“微信”可以添加小虎哥的微信号,我们一起进步,不做码农,只做工程师!
相关文章:
Java的Class类:每一个类都对应着一个Class对象
Class类的基本概念 在Java中,每一个类都对应着一个Class对象,这个Class对象包含了类的相关信息,例如类的名称、继承关系、方法、字段、注解等信息。通过Class对象,可以获取类的各种信息并对其进行操作。 请细品这句话࿱…...
JavaScript预编译机制
变量预编译 任何变量,如果未经声明就赋值,此变量是属于 window 的属性,而且不会做变量提升,无论在哪个作用域内赋值。比如说直接写 console.log(a)肯定会报错,提示找不到 a。但如果直接写 a 100就不会报错࿰…...
【ARM 嵌入式 编译系列 4.1 -- GCC 编译属性 likely与unlikely 学习】
文章目录 GCC likely与unlikely 介绍linux 内核中的 likely/unlikely 上篇文章:ARM 嵌入式 编译系列 4 – GCC 编译属性 __read_mostly 介绍 下篇文章: ARM 嵌入式 编译系列 4.2 – GCC 链接规范 extern “C“ 介绍 GCC likely与unlikely 介绍 likely 和 unlikely …...

《算法竞赛·快冲300题》每日一题:“造电梯”
《算法竞赛快冲300题》将于2024年出版,是《算法竞赛》的辅助练习册。 所有题目放在自建的OJ New Online Judge。 用C/C、Java、Python三种语言给出代码,以中低档题为主,适合入门、进阶。 文章目录 题目描述题解C代码Java代码Python代码 “ 造…...

NSS [MoeCTF 2022]baby_file
NSS [MoeCTF 2022]baby_file 题目源码直接给了 使用data伪协议发现被ban了。 那就换一种伪协议php://filter,猜测flag在同目录下flag.php中或根目录下/flag中 php://filter/readconvert.base64-encode/resourceflag.php读取文件源码(针对php文件需要ba…...

喜报!诚恒科技与赛时达科技达成BI金蝶云星空项目合作
随着全球数字化浪潮轰轰烈烈袭来,仅仅凭借手工处理的方式难以在庞大的数据海洋中精准获取信息、把握市场需求、了解目标用户,为企业创新提供强有力的支持。深圳赛时达科技有限公司(简称赛时达科技)希望通过数字化转型实现从手工处…...
Vscode python调试和运行环境设置
Vscode python调试和运行环境设置 文章目录 Vscode python调试和运行环境设置前言一、是否为每次运行python程序都要选择环境烦恼二、是否为python程序调试不能进标准/第三方库而烦恼 前言 一、是否为每次运行python程序都要选择环境烦恼 在.vscode文件夹(没有就自己造一个)下…...
lua中执行luci.sys.call、luci.sys.exec、os.execute的区别
相同点:都是调用Linux底层脚本及程序 不同点: (1)luci.sys.call(command) 脾气捉摸不透,实际使用有些时候没有得到任何状态或数据返回,纯粹被用了一下。 (2)luci.sys.exec(command) …...

Python-OpenCV中的图像处理-模板匹配
Python-OpenCV中的图像处理-模板匹配 模板匹配单对象的模板匹配多对象的模板匹配 模板匹配 使用模板匹配可以在一幅图像中查找目标函数: cv2.matchTemplate(), cv2.minMaxLoc()模板匹配是用来在一副大图中搜寻查找模版图像位置的方法。 OpenCV 为我们提…...
模拟队列(c++题解)
实现一个队列,队列初始为空,支持四种操作: push x – 向队尾插入一个数 xx;pop – 从队头弹出一个数;empty – 判断队列是否为空;query – 查询队头元素。 现在要对队列进行 MM 个操作,其中的…...

Redis_哨兵模式
9. 哨兵模式 9.1 简介 当主库宕机,在从库中选择一个,切换为主库。 问题: 主库是否真正宕机?哪一个从库可以作为主库使用?如何实现将新的主库的信息通过给从库和客户端? 9.2 基本流程 哨兵主要任务: 监控选择主库通知 会有…...

Mysql中如果建立了索引,索引所占的空间随着数据量增长而变大,这样无论写入还是查询,性能都会有所下降,怎么处理?
索引所占空间的增长确实会对MySQL数据库的写入性能和查询性能造成影响,这主要是由于索引数据过多时会导致磁盘I/O操作变得非常频繁,从而使性能下降。为此,可以采取以下几种方式来减缓这种影响: 1. 限制索引的大小:可以…...

MySQL 约束
查看约束 select * from information_schema.table_constraints where table_name要查看的表名按约束的作用范围 列级约束: 将此约束声明在对应字段的后面 表级约束:在表中所有字段都声明完,在所有字段的后面声明的约束,可以声…...

unity实现角色体力功能【体力条+体力计算】
导读:实现功能 1、角色体力计算 2、角色疲劳动画 3、体力条制作、跟随 默认做好角色的idle/run/walk动画、切换和玩家输入,我使用的是新输入系统,动画时单变量混合树,参数Sports。 【每一部分功能根据自己需求观看哦】 1、角色体…...
【深度学习所有损失函数】在 NumPy、TensorFlow 和 PyTorch 中实现(1/2)
一、说明 在本文中,讨论了深度学习中使用的所有常见损失函数,并在NumPy,PyTorch和TensorFlow中实现了它们。 二、内容提要 我们本文所谈的代价函数如下所列: 均方误差 (MSE) 损失二进制交叉熵损失加权二进…...

七夕好物分享,哪些礼物适合送男/女朋友?这几款好物最为合适!
七夕是个值得纪念的日子,牛郎织女鹊桥相会的故事百年流传,七夕是一个表达爱意的节日,送礼物是必不可少的,情侣们可以选择一份有意义的礼物,也可以选择对方需要的东西当做礼物来赠送,总的来说,送…...

C语言学习系列-->看淡指针(2)
文章目录 前言一、数组名的理解二、使用指针访问数组三、一维数组传参本质四、二级指针五、指针数组六、指针数组模拟二维数组 前言 不把指针学的扎实,可不敢说自己C语言基础学的好 一、数组名的理解 #include <stdio.h> int main() {int arr[10] { 1,2,3,4…...
Java基础篇--Character 类
Character 类是用来操作单个字符的,它将 char 值包装在一个对象中。 实际上,在 Java 中,char 是基本数据类型,而 Character 是 char 的包装类。通过 Character 类,可以使用一系列方法来操作字符。在创建 Character 对…...
Flutter参考资料
Flutter 官网 : https://flutter.dev/ Flutter 插件下载地址 : https://pub.dev/packages Flutter 开发文档 : https://flutter.cn/docs ( 强烈推荐 ) 官方 GitHub 地址 : https://github.com/flutter Flutter 中文社区 : https://flutter.cn/ Flutter 实用教程 : https://flut…...
sed命令如何正确修改ini配置文件
需要保证key值的唯一性 function sed_key_value_file(){key$(echo "$1" | sed s/[\/&]/\\&/g)value$(echo "$2" | sed s/[\/&]/\\&/g)# 先删除原有的value,然后添加新的keyvaluesed -i -e "s#${key}.*#${key}${value}#&q…...

『uniapp』添加桌面长按快捷操作 shortcuts(详细图文注释)
目录 手机环境适配说明安卓效果图代码 iOS(暂未实测,没有水果开发者)总结 欢迎关注 『uniapp』 专栏,持续更新中 欢迎关注 『uniapp』 专栏,持续更新中 手机环境适配说明 个别手机系统可能需要进行特别的权限设置,否则会无法使用 桌面快捷方式: 已知的有…...

5.29打卡
浙大疏锦行 DAY 38 Dataset和Dataloader类 知识点回顾: 1. Dataset类的__getitem__和__len__方法(本质是python的特殊方法) 2. Dataloader类 3. minist手写数据集的了解 作业:了解下cifar数据集,尝试获取其中一张图…...
【数学 逆序对 构造】P12386 [蓝桥杯 2023 省 Python B] 混乱的数组|普及+
本文涉及知识点 数学 构造 P12386 [蓝桥杯 2023 省 Python B] 混乱的数组 题目描述 给定一个正整数 x x x,请找出一个尽可能短的仅含正整数的数组 A A A 使得 A A A 中恰好有 x x x 对 i , j i, j i,j 满足 i < j i < j i<j 且 A i > A j A_…...

[RoarCTF 2019]Easy Calc
查看源代码 <!--Ive set up WAF to ensure security.--> <script>$(#calc).submit(function(){$.ajax({url:"calc.php?num"encodeURIComponent($("#content").val()),type:GET,success:function(data){$("#result").html(<div …...
KEYSIGHT N9320B是德科技N9320B频谱分析仪
KEYSIGHT N9320B是德科技N9320B频谱分析仪 附加功能: 频率范围:9 kHz 至 3 GHz 分辨率带宽:10 Hz 至 1 MHz DANL:-130 dBm,-148 dBm,带可选前置放大器 整体幅度精度:<1.5 dB 最小非零扫…...
Go开发简历优化指南
一、简历格式与排版 (一)简洁至上 去除多余装饰:在 Go 后台开发简历中,应摒弃那些花哨却无实际作用的元素,比如复杂的封面、页眉、页脚等。设想招聘人员每日要处理大量简历,若你的简历有繁杂的封面设计&a…...

在日常管理服务器中如何防止SQL注入与XSS攻击?
在日常管理服务器时,防止SQL注入(Structured Query Language Injection)和XSS(Cross-Site Scripting)攻击是至关重要的,这些攻击可能会导致数据泄露、系统崩溃和信息泄露。以下是一份技术文章,介…...

BugKu Web渗透之矛盾
开启场景,打开网页。发现是一段php代码。 这段代码也很好理解,就是get方式传参num,如果num不是数字类型,那么输出num的值,并且num1时,输出flag的值。 首先看看is_numeric的意思。 开始我想到了使用科学技术…...

怎么快速判断一款MCU能否跑RTOS系统
最近有朋友在后台中私信我,说现在做项目的时候有时候总是会考虑要不要用RTOS,或者怎么考量什么时候该用RTOS比较好、 关于这个问题,我个人也是深有感触的,做开发这么久了,大大小小的产品都做过不少了。有用RTOS开发的…...
PyTorch中 torch.utils.data.DataLoader 的详细解析和读取点云数据示例
一、DataLoader 是什么? torch.utils.data.DataLoader 是 PyTorch 中用于加载数据的核心接口,它支持: 批量读取(batch)数据打乱(shuffle)多线程并行加载(num_workers)自…...