“嗨,阿米戈!”
“现在是重头戏了。我们将熟悉 Class 类并接触反射。
正如您可能已经意识到的那样,Java 中的一切都是对象。对象需要什么?每个对象定义了什么这是怎么回事?”
“一类!”
“对!干得好。每个对象都有一个类。但是回到对象......有些对象完全包含一个实体,而其他对象只是帮助管理它。”
“后一种类型包括FileOutputStream和Thread。当您创建Thread对象时,不会创建新线程。线程是在调用 start() 方法后由 Java 虚拟机创建的。该对象只是帮助管理进程。”
“与FileOutputStream相同:文件存储在磁盘上,操作系统管理存储和访问。但我们可以通过 File 对象与它交互,再次借助 Java 虚拟机。”
“是的,我已经明白了。”
“所以,有一个特殊的类,叫做Class,用于与类进行交互。”
“这不难猜。”
“是的。每次 Java 虚拟机将一个新类加载到内存中时,它都会创建一个 Class 对象,您可以使用它来获取有关加载类的特定信息。”
“每个类和对象都与一个 «类对象»相关联。”
例子 | 描述 |
---|---|
|
获取 Integer 类的 Class 对象。 |
|
获取 int 类的 Class 对象。 |
|
获取 String 对象的 Class 对象。 |
|
获取 Object 对象的 Class 对象。 |
“哇!真有趣!”
“你还记得类这个词在Java中是关键字,不能用作变量名吗?”
“哦,是的,我知道,我知道。我只是忘记了。”
“您是否已经在某处使用了 Class 对象?”
“是的,我们在编写自己的 equals 方法实现时使用了它。”
“是的,您可以使用 getClass() 方法来测试对象是否具有相同的类。”
“你能用这个东西做什么?”
“好吧,很多事情:”
Java代码 | 描述 |
---|---|
|
获取类名。 |
|
按名称获取类。 |
|
比较对象的类。 |
“有趣,但没有我想象的那么酷。”
“要酷吗?还有倒影, 倒影超酷。”
“什么是反射?”
"反射是一个类获取自身信息的能力。Java 有特殊的类: Field和Method,它们类似于类的Class类。就像Class对象让你获得一个类的信息一样,Field 对象提供一个字段的信息,并且 Method 对象提供有关方法的信息。看看你可以用它们做什么:“
Java代码 | 描述 |
---|---|
|
获取 List 类接口的 Class 对象列表 |
|
获取String类的父类的Class对象 |
|
获取 List 类的方法列表 |
|
创建一个新的字符串 |
|
获取 String 类的 length 方法并在 String 上调用它 |
“哇!那真是太酷了!”
GO TO FULL VERSION