GetClassLoader和GetCallerClass的使用

来源:互联网 发布:ubuntu php 安装路径 编辑:程序博客网 时间:2024/06/05 09:52

GetClassLoader是JAVA中用来得到ClassLoader的

JAVA中有以下几种ClassLoader.

 

1.  Bootstrap ClassLoader - GetClassLoader的返回值为Null,是JVM的C++源码, Ext ClassLoader 的Parent

主要负责jdk_home/lib目录下的核心 api 或 -Xbootclasspath 选项指定的jar包装入工作

 

2   System ClassLoader -  GetClassLoader返回值为SystemClassLoader.

主要负责java -classpath/-Djava.class.path所指的目录下的类与jar包装入工作

 

3.  Ext ClassLoader  - 是AppClassLoader 的Parent 返回Ext ClassLoader 

主要负责jdk_home/lib/ext目录下的jar包或 -Djava.ext.dirs 指定目录下的jar包装入工作。

 

4.  App ClassLoader - 返回AppClassLoader

主要负责加载用户类。

 

4.  Customer Class Loader  - 一般都继承App ClassLoader

用户自定义。

 

 

 

GetCallerClass是Sun.Reflector包下Reflection类的方法

定义为GetCallerClass(int level)

0  -   返回 Reflection类

1  -   返回调用GetCallerClass的类,比如  Class Test{void test(){Class cs = Reflection.GetCallerClass(1)}}, 返回Test.

2  -    返回再上层的类, 如Class Main{new Test().test()}, GetCallerClass(2) 则返回Main.

3. 4. ....层层上传。

 

 

两个函数结合可以使用加载安全,如