java.lang包是Java语言的核心类库,包括了运行Java程序必不可少的系统类,如基本数据类型、基本数学函数、字符串处理、线程、异常处理类等。每个Java程序运行时,系统都会自动地引入java.lang包,所以这个包的加载是缺省的。
java的类装载器使用的是优先策略,加载类的时候先找到哪个就加载哪个。有时候我们做一个系统,当类库非常庞大的时候,类可能会出现冲突,也就是类路径中存在不同版本的两个相同的类,这往往给调试带来非常大的麻烦,我们可能修改了类,但由于类加载器却使用的是另外一个未被更新的类,这个时候就会丈二和尚摸不着头脑,一度使调试过程误入歧途。import java.security.CodeSource
import java.security.ProtectionDomain
import org.apache.commons.lang.StringUtils/*** 判断类是从哪个jar包中加载的
* @author Winter Lau*/public class Test {
public static void main(String[] args) {
ProtectionDomain pd = StringUtils.class.getProtectionDomain()
CodeSource cs = pd.getCodeSource()
System.out.println(cs.getLocation())}}
这段代码在我的机器上运行的结果是:
但是有一个限制经由系统类加载器所加载的类不能使用该方法来获取路径,假如你对 String类做上面的测试就会发生空指针异常,因为所得到的CodeSource为空,你可以在程序启动的时候使用-verbose来查看系统类的装载信息,使用方式有如:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)