[java复习] Class + 反射

这一章的复习主要涵盖。
这里整理的都是个人觉得比较重要重新认真分析的东西,不一定全部为基础,如果有不准确的地方,还望大佬从评论区指出,感激不尽。

文章中的所有的自定义的测试都在自己的 java-review 仓库中,本文对应的链接:

RTTI 运行时类型信息

运行时类型信息使得你可以在程序运行时发现和使用类型信息

尽管 java 中的多态能够使得父类引用指向子类对象,但调用 Object # getClass 方法的时候,得到的仍然是其 子类对象的实际类型,对象的实际类型并不会因为引用的类型而发生改变。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// test

private static void RTTI(Object o) {
log(o.toString() + ": " + o.getClass().getSimpleName());
}

private static void type() {
Shape s1 = new Square();
Shape s2 = new Circle();
RTTI(s1);
RTTI(s2);

/* Output:

com.example.review.classreflection.democlass.Square@4e50df2e: Square
com.example.review.classreflection.democlass.Circle@7291c18f: Circle
*///:~
}

Class

java 中的类型信息就是通过 clas 对象 来表示的,用来创建类的所有常规对象

  1. java 中使用 Class 对象来执行其 RTTI
  2. 每创建一种新的类型都会创建一个新的 Class 对象,每个类都会有一个 Class 对象
  3. Class 对象类加载器 共同完成创建 类的对象实例

类加载器

反射