我们已经讨论过类是复杂数据类型这一事实。现在让我们谈谈类的另一面——Java 机器是如何处理类的。请记住,在 Java 中,一切都是对象,甚至是类。一个类就是一个对象。这让你感到惊讶吗?那我们继续吧。
加载类到内存
实际上,当一个类被加载到内存中时,会创建三个特殊的“对象”:
插图简要说明:
黄色矩形:
代码文件作为扩展名为“.class”的文件存储在磁盘上。它包含有关类、类的字段和方法的信息,以及编译成字节码的方法的源代码。
橙色矩形:
当 Java 机器将一个类加载到内存中时,它会将字节码编译成特定于计算机处理器和操作系统的机器码。只有 Java 机器可以访问此机器代码。作为 Java 程序员,我们无权访问它。
绿色矩形:
Java 机器创建一个包含类的所有静态变量和方法的对象。您使用类名访问此“对象”。
例如,当您编写 时,您指的是位于类中的静态变量。这个对象是我们的绿色矩形。这就是存储静态变量的地方。java.lang.Math.PI
PI
java.lang.Math
java.lang.Math
PI
蓝色矩形:
当 Java 机器将一个类的代码加载到内存中时,它会创建一个特殊的java.lang.Class
对象,该对象存储有关加载的类的信息:它的名称、方法名称、字段名称和类型等。
“Class”这个名字可能有点令人困惑。将其称为 ClassInfo 更有意义,因为此类仅存储有关加载类的一些信息。
您可以使用如下命令获取任何类型的 Class 对象:
Class name = ClassName.class;
例子:
代码 | 笔记 |
---|---|
|
获取Class 包含String 类信息的对象 |
|
获取Class 包含Object 类信息的对象 |
|
获取Class 包含Integer 类信息的对象 |
|
获取包含有关类型Class 信息的对象int |
|
获取包含有关类型Class 信息的对象void |
您还可以从任何对象获取对类描述对象的引用,因为每个对象都有getClass()
从类继承的方法Object
。
例子:
代码 | 笔记 |
---|---|
|
与相同的对象String.class |
|
与相同的对象Integer.class |
|
与相同的对象Boolean.class |
GO TO FULL VERSION