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);