反射之------Class实例可以是那些类型?
概述:
关于Class实例的获得的四种方法中我们知道可以通过类名.class获得对应的Class实例,也就是说所有被加载到内存中的当前运行时类都对应一个Class实例,而这个“当前运行时类”并不是指一定是类的概念,也就是Class实例的类型并不是只有类的概念,Class实例实际上有:
Class实例的类型:
- class
外部类,成员(成员内部类,静态内部类),局部内部类,匿名内部类 - interface
接口 - []
数组 - enum
枚举 - annotation
注解 - primitive type
基本数据类型 - void
代码演示:
import java.lang.annotation.ElementType; public class GetClassDemos { public static void main(String[] args) { //1.class具体类 Class<Object> objectClass = Object.class; System.out.println("class具体类"+objectClass); //2.接口 Class<Comparable> comparableClass = Comparable.class; System.out.println("接口"+comparableClass); //3.数组 Class<String[]> strArrClass1 = String[].class; Class<String[][]> strArrClass2 = String[][].class; System.out.println("数组"+strArrClass1); System.out.println("数组"+strArrClass2); //不同维度的数组的Class对象是不同的 //4.枚举 Class<ElementType> elementTypeClass = ElementType.class; System.out.println("枚举"+elementTypeClass); //5.注解 Class<Override> overrideClass = Override.class; System.out.println("注解"+overrideClass); //6.基本数据类型 Class<Integer> integerClass = int.class; System.out.println("基本数据类型"+integerClass); //7.void Class<Void> voidClass = void.class; System.out.println("void"+voidClass); //关于数组的注意: int[] a=new int[100]; int[] b=new int[200]; Class aClass = a.getClass(); Class bClass = b.getClass(); System.out.println(aClass==bClass);//只要数组类类型和维度相同那么就是同一个Class } }
迎风少年
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
【推荐】AI 的力量,开发者的翅膀:欢迎使用 AI 原生开发工具 TRAE
【推荐】2025 HarmonyOS 鸿蒙创新赛正式启动,百万大奖等你挑战
· AES 加密模式演进:从 ECB、CBC 到 GCM 的 C# 深度实践
· InnoDB为什么不用跳表,Redis为什么不用B+树?
· 记一次 C# 平台调用中因非托管 union 类型导致的内存访问越界
· [EF Core]聊聊“复合”属性
· 那些被推迟的 C# 14 特性及其背后的故事
· 博客园出海记-开篇:扬帆启航
· 微软开源的 MCP 教程「GitHub 热点速览」
· 记一次 .NET 某汽车控制焊接软件 卡死分析
· 关于布尔类型的变量不要加 is 前缀,被网友们吐槽了,特来完善下
· C#中的多级缓存架构设计与实现深度解析