
2007年10月20日 22:48:25
反射机制
|
反射的初步概念: ClassLoader类中的 [url=file:///D:/jdk-6-doc/docs/api/java/net/URL.html]URL [url=file:///D:/jdk-6-doc/docs/api/java/lang/ClassLoader.html#getResource(java.lang.String)]getResource([url=file:///D:/jdk-6-doc/docs/api/java/lang/String.html]String name)在查找[url=file:///D:/jdk-6-doc/docs/api/java/lang/String.html]String name时,会找遍当前设定的classpath目录,这就是为何把images包放在src下,因为src目录在编译后会被默认的放在bin目录下,而classpath路径中的 .(当前路径代表项目的bin目录),所以说要查找的images目录相当于在classpath下(相关实例在坦克大战图片版/加入爆炸图片_1中)。 类的初步动态加载机制:类在被classloader第一次加载进入内存中后,并不是一次性的把类中的用到的其他类一次性的全部加载,而是执行到哪个类,才加载哪个类, 当类被loader到内存中,其静态语句块static{}只被执行了一次,在创建对象时不会被重复loader进入内存中。而动态语句块{}会被多次loader进入内存。 JDK内置的ClassLoader有:bootstrap classloader(1. implemented by native language 2.load the core class of jdk) extesion classloader(loader the class from jre/lib/ext) Application classloader(1.loader user-define classes 2.ClassLoader.getSystemClassLoader()) SecureClassLoader和URLClassLoader ClassLoader之间的分层关系是:appliacation ClassLoader 对象之中有一个parent引用指向了extesion ClassLoader,因此appliacation ClassLoader对象可以通过getParent()得到parent引用指向的extesion ClassLoader对象了。 ClassLoader在load class的时候首先找上层loader是不是load过了,如果已经load过了,就不会再次load 优点是:安全性好! 自己写的String.class永远没有机会执行(破坏性的代码) Class类中有一个forName(String name)可以把名字name 的类load到内存中去,而返回name.class是class类的对象,当调用newInstance()来创建一个类对象!调用getMethods方法返回的是该类中方法类型的数组引用(Methods[]),而每个方法对象可以使用过 getReturnType()的到方法的返回类型,同样可以使用getParameterType()来得到参数类型。 Tags:
反射
|
一共有 0 条评论