本是新年,怎奈新冠肆掠,路上行人,男女老少几乎是全副口罩,形色匆匆;偶尔有一两个裸露口鼻的,估计都是没囤到口罩的,这几天药店几乎都是贴上大字:口罩没货。看着网络上病毒消息满天飞,我也响应在家做贡献的号召。上班时,都是早出晚归,几乎只有早上能看到娃,出门时,娃每次都说:see you tomorrow 。赶上疫情,天天在家带娃,终于可以多多陪伴了;别说,带娃还真比上班费神。想着小时候,特别想有一个玩具小船,动手给娃做了一个,附图一张。把娃带好了,也得思考下学习的事儿。学习java有段时间了,想起之前学习java时,看着Class<?> 这样的符号就怵,不明白其表示的含义,又重读《java编程思想》第14章, 趁着这样的时间好好整理了一下,直面当时的怵。
Class<?> - 类的类型,是运行时类型信息,也就是 RTTI - RTTI - RunTime Type Infomation;所谓一切皆对象,类也是一个对象,而类的类型信息,就叫做Class对象。RTTI使得我们可以在运行时发现和使用类型信息。以前觉得RTTI离我很远(java菜鸟),其实多态机制正是因为类对象携带了类的类型信息,在类型转化时可以识别到对象的类型。举个栗子,如下, ChildClassTest向上转型为 SuperClassTest时,丢失了子类类型信息,而运行时,向下转型时,又使用RTTI 获取了实际类型,从而可以正常打印出 ChildClassTest。但是,为什么向上转型丢失类型信息,再向下转型时,可以获取到实际的类型,这要从RTTI 的工作原理说起了。
public class SuperClassTest {
}
public class ChildClassTest extends SuperClassTest {
}
SuperClassTest superClassTest = new ChildClassTest();
PrintTool.print(superClassTest);
#打印
com.hj.tool.klass.ChildClassTest@685f4c2e