第十一章 运行期类型判定
No1:
对于作为程序一部分的每个类,它们都有一个Class对象。换言之,每次写一个新类时,同时也会创建一个Class对象(更恰当的说,是保存在一个完全同名的.class文件中)。在运行期,一旦我们想生成那个类的一个对象,用于执行程序的Java虚拟机(JVM)首先就会检查那个类型的Class对象是否已经载入。若尚未载入,JVM就会查找同名的.class文件,并将其载入。所以Java程序启动时并不是完全载入的,这一点与许多传统语言都不同。
一旦那个类型的Class对象进入内存,就用它创建那一类型的所有对象。
No2:
RTTI(运行期类型判定)包括
1.类型强转
2.Class.forName("类全名“);--返回一个句柄--类名.class
3.instanceof
No3:
Class c = Class.forName("类全名”);
c.getMethods();--获取类的方法
c.getMethods();--获取类的构造器
No4:
RTTI:run-time type identification
多态就是基于RTTI实现的,RTTI的功能主要是由Class实现的
多态的原理:Java中每个对象都有相应的Class类对象,因此,我们随时能通过Class对象知道某个对象“真正”所属的类。无论我们对引用进行怎样的类型转换,对象本身所对应的Class对象都是同一个。当我们通过某个引用调用方法时,Java总能找到正确的Class类中所定义的方法,并执行该Class类中的代码。由于Class对象的存在,Java不会因为类型的向上转换而迷失。
No5:
Human personA = new Human();
Class c1 = personA.getClass();
String name1 = c1.getName();
getClass()就是得到对应Class对象的引用
No6:
Class c2 = Class.forName("Human");
String name2 = c2.getName();
forName()方法接收一个字符串作为参数,该字符串是类的名字。这将返回对应的Class类对象
No7:
Class c3 = Woman.class;
String name3 = c3.getName();
Woman.class方法是直接调用类的class成员,这将返回对应的Class对象
No8:
Class类的方法:
c1.getName();--返回类的名字
c1.getPackage();--返回类所在的包
c1.newInstance();--创建相应类的对象
c1.getFields();--返回所有的public数据成员
c1.getMethods();--返回所有的public方法