1.rtti Runtime Type Information 运行时类型信息
2.Class c = Class.forName("类名") 获得一个class对象的引用,而不要该类型的对象。
c.getName 全限定名(包含包名) c.getSimpleName() 不含包名的类名
c.getCanonicalName() 全限定类名
c.newInstance我不知道你的确切类型,但是无论如何要正确创建自己,需强制类型转换,类必须有默认构造器。
3.类字面量常量
如boolean.class返回一个安全,编译时受检查的Class对象的引用。
使用.class时三步:加载,链接(验证字节码,为静态域分配空间),初始化(如果该类具有超类,则先对其初始化)
4.static final 是编译期常量,不需要对类进行初始化就可以使用
如 static final int i=10;
static final int j = i*10;不是编译期常量,对j的使用,会促使该类的初始化。
如果一个static而不是final ,对其访问,同样会进行链接和初始化。
5.泛化的Class引用
Class<Integer> i = int.class;
i = Integer.class;一样的;
类型转换 i.cast(b);
类型检查 x instanceof Dog 或 Dog.isInstance(x):x是否是Dog或其子类等 ==比较是确切类型。
转换前先进行类型
6.动态代理
父类下有很多子类,代理类通过多态的控制这些子类完成一些操作,就是动态代理类。具体的还要看书上的代码。
7.空对象
单例初始化一个空对象,这样不用总是为空指针异常而检测。
8.接口与类型信息
Method g = a.getClass().getDeclaredMethod(methodName);
g.setAccessible(true);
g.invoke(a);
本文介绍了Java中RTTI(运行时类型信息)的概念及其应用,包括如何通过Class对象获取类信息、实例化对象、使用泛型Class引用进行类型检查与转换,以及动态代理的基本原理。

被折叠的 条评论
为什么被折叠?



