以代表列表的list对象为例,ListKlass既要能充当类型的功能,又要充当对象的功能,最直观的办法就是为ListKlass关联一个普通对象,这个对象被称为TypeObject。当要把list作为一个普通对象使用的时候,虚拟机里让ListKlass所关联的TypeObject出面;当要把list作为一个类型使用时,虚拟机则让ListKlass负责处理。Java种的这个对象称为java_mirror,这个对象里还存储着static field。
在左边的Python代码中,list这个名称即可以代表类型,通过调用它创建一个列表对象;也可以代表一个普通对象,被打印出来。同样的,在Java中,Integer.class这个东西也兼具对象和类型的能力,既可以被打印,也可以用来创建普通对象。我们把这种对象称为类型对象。显然,类型对象是虚拟机实现反射功能的基础。