Class.forName("Gum");
forName是取得Class引用的一种方法,返回一个Class对象的引用。
如果Gum类还没有被加载就加载它,在加载过程中,Gum的静态子句被执行。
可能产生的异常:ClassNotFoundException
Class.getInterfaces("Gum")
返回对象是Class类型,表示类Gum包含的接口
如类Gum implements interface1,
则会获取到interface1的类对象
Class.newInstance()
实现“虚拟构造器”的一种途径
类字面常量
obj.Class生成对Class对象的引用,它比forName更加安全,因为它在编译时就接受检查。
注意:当使用.Class来创建Class对象的引用时,不会自动初始化Class对象。
输出结果为:
Initialzing Initable After creating Initable ref 47 258 Initialzing Initable2 147 Initialzing Initable3 After creating Initable3 ref 74
结论:如果一个static final值是"编译期常量",就象Initable.staticFinal那样,那么这个值不需要对Initable类初使化就可以读取,但是如果只是将一个域设置为static和final的,如对Initable.staticFinal2的访问将进行强制的初使化,因为它不是一个编译型常量。
如果一个static而不是final的,那么在它访问时,总是要求进行链接(为这个域分配存储空间)和初始化(初始化该存储空间),就像对Initable2.staticNonFinal那样。
泛化的Class引用
Class<Integer> iniClass=int.class
新的转型语法
case()
InstanceOf
反射
getMethods()返回Method对象的数组
getConstructors()返回Contructor对象的数组
动态代理
实现InvocationHandler接口
public Object invoke(Objct proxy,Method method,Object[] args)throws Throwable{}方法
通过Proxy.newProxyInstance(ClassLoader,Class[],InvocationHandler)创建动态代理
具体示例参见:
http://www.blogjava.net/aoneany/articles/271019.html
Powered by: BlogJava Copyright © 沙漠中的鱼