我的博客
欢迎来到我的博客
bunny.icu

第14章类型信息

第14章类型信息
  1. 如果向上转型,基类中的this代表的是导出类的this。this在涉及字符串拼接的时候,就会自动调用toString()方法。
  2. 每一个类又都一个Class对象,Class.forName()是取得Class对象的引用的一个方法,参数是类全名(含包名),如果类没加载就加载它,加载过程中会执行静态代码块。Class.forName()方法如果没有找不到要加载的类,就会抛出异常ClassNotFoundException。
  3. 如果一个类已经被加载了,还可以用这个类的getClass()方法获取Class对象的引用。
  4. Class对象包含了一些有用的方法:
方法 作用
getName() 产生全限定的类名
getSimpleName() 产生不含包名的类名
isInterface() 判断是否为接口
getSuperClass() 查询直接基类
  1. 直接使用类名.class也可以获取Class对象的引用,这样做在编译器就会得到检查,更安全高效。当使用类名.class来创建Class对象的引用时,不会自动初始化该Class对象。这种用法称为类字面常量。 类字面常量不仅可以用普通类,还可以用于接口、数组、基本数据类型。
  2. Class引用总是指向某个Class对象,它可以制造类的实例,并包含可作用于这些实例的所有方法代码。他还包含该类的静态成员,因此,Class引用标识的就是它所指向的对象的确切类型,而该对象便是Class类的一个对象。(P320)
  3. Class<?>优于Class,问号时通配符,还可以与extends关键字结合,例如Class<? extends Number>,它与仅仅声明Class<Number>不同。关于泛化Class的引用,还没用看懂,参考P320
  4. 在做类型转换前,可以先做检查,这样可以消除发生异常的可能性,需要用到的关键字是instanceof,例如:
if (test05_2 instanceof Test05_2_2) {
    ((Test05_2_2) test05_2).f();
}
  1. Class类的isInstance()方法比instanceof关键字更强大,可以替代instanceof关键字。isInstance()方法的参数是对象,不是类。例如:
if (Test05_2_2.class.isInstance(test05_2)) {
    ((Test05_2_2) test05_2).f();
}

版权声明


本作品系原创, 转载须遵循 CC BY-NC-ND 4.0 许可协议
本文标题:第14章类型信息
本文链接:https://www.bunny.icu/archives/1175

推荐文章

发表评论

textsms
account_circle
email

bunny.icu

第14章类型信息
第14章类型信息
扫描二维码继续阅读
2018-09-14