Java JVM中可以有多少类文本实例?

Java JVM中可以有多少类文本实例?,java,reflection,Java,Reflection,我从来没有专门处理过类文本。我认为它们主要用于反射API。我想了解类文本可以有多少个实例?它们是否受实例控制(例如单例) Class-stringClass=String.Class; 类对象(至少在理论上)是在加载类时创建的。每班只有一个。但是,将其称为单例是不正确的,因为存在多个类对象,每个对象对应一个给定的类,就像可以有多个具有不同值的字符串对象一样 请注意,如果由不同的类加载器加载,则可以有两个名为“a.b.c”的不同类对象。这将是两个不同的类(甚至可能不相似)和两个不同的类对象。类作为

我从来没有专门处理过
类文本
。我认为它们主要用于反射API。我想了解类文本可以有多少个实例?它们是否受实例控制(例如单例)

Class-stringClass=String.Class;
类对象(至少在理论上)是在加载类时创建的。每班只有一个。但是,将其称为单例是不正确的,因为存在多个类对象,每个对象对应一个给定的类,就像可以有多个具有不同值的字符串对象一样


请注意,如果由不同的类加载器加载,则可以有两个名为“a.b.c”的不同类对象。这将是两个不同的类(甚至可能不相似)和两个不同的类对象。

类作为对象由类加载器加载到堆中

因此,每个类加载器只存在一个类文本实例


但是,您可以在代码中创建尽可能多的class类型实例。

在JVM启动时,class作为对象在Heap by class Loader中加载…因此每个class Loader只存在一个class literal实例。。。但是,您可以在代码中创建任意多个class类型的对象…每个类一个
class
对象,这是可以预见的。实际上,它不是一个“类文字实例”,它是一个类的实例,您可以使用Java源代码中的文字符号来引用它。“在”文本后面的对象与显式向类加载器请求时得到的类对象相同。@hotlicks true。.我试图用不同的方式输入单词,以便清楚地显示…:-)。。。。类的实例也可以表示类的实例对象……”“每个类只有一个”并不是全部——还有古怪的
int.class
float.class
,甚至
void.class
。这些是与基元类型相对应的
类的实例。@Hot-Licks我有两个疑问。1) 你为什么在第一行说“理论上”?2) 你能详细说明你的第二段吗?我不能理解它,我说“理论上”,因为实际的类对象是一个虚拟对象——一个海量数据结构的“前端”。它可以在第一次引用时以“惰性”方式创建,而不是在加载类时创建。但实际上,它可能是用实际的类创建的,因为它通常在类加载后不久被引用。至于第二部分,您总是可以有多个同名的类,但是加载在不同的类加载器下——查找它。
Class<String> stringClass = String.class;