Java API中的类“Class”和“class”关键字有什么区别?

Ham*_*mad 6 java

ClassJava 类(扩展Object)和class关键字(用于创建类的单词)之间有什么区别?

psi*_*poo 6

在编程中,反射是程序通过分析运行时细节(例如对象实例的实际实现类)在运行时修改自身结构和行为的能力。该类Class是用于反射目的的 Java API 的一部分。鉴于class关键字是 Java 语言的结构,标记新类的定义,Class类则用于将变量和参数键入为类本身。这是程序使用类定义本身作为对象进行编程的一种方式(例如,您可以以编程方式枚举类的公共方法)。

此外,任何o类型的实例Object(即 Java 中的任何对象)都会继承getClass实例方法。这会产生对象的实际运行时类,而不管存储该对象的变量的编译时代码声明的类如何。例如,对于某些已定义的类X

Object o = new X();
Class<?> type = o.getClass();
Run Code Online (Sandbox Code Playgroud)

type现在将是对类本身的引用X,它与Class<?>通用描述相匹配,因为该类X实际上是 type 的实例Class<X>

每个定义的类还有一个称为class引用类本身的静态变量。调用getClass类 X 的实例将返回Class<X>与该类的class静态变量相同的实例:

("some string").getClass() == String.class
Run Code Online (Sandbox Code Playgroud)

值得注意的是,class即使原始类型不是对象,它们也都具有静态变量。还值得注意的是,原始类型与其包装类class的不同:class

int.class != Integer.class
Run Code Online (Sandbox Code Playgroud)