【转】查看java类是从哪个包加载

摘要:
Java的类装载器使用的是优先策略,加载类的时候先找到哪个就加载哪个。那么怎么来确定我当前所加载的类是位于哪个路径或者存在于哪个jar包当中呢?但是有一个限制经由系统类加载器所加载的类不能使用该方法来获取路径,假如你对String类做上面的测试就会发生空指针异常,因为所得到的CodeSource为空,你可以在程序启动的时候使用-verbose来查看系统类的装载信息,使用方式有如:java-verboseMyApp

Java的类装载器使用的是优先策略,加载类的时候先找到哪个就加载哪个。有时候我们做一个系统,当类库非常庞大的时候,类可能会出现冲突,也就是类路径中存在不同版本的两个相同的类,这往往给调试带来非常大的麻烦,我们可能修改了类,但由于类加载器却使用的是另外一个未被更新的类,这个时候就会丈二和尚摸不着头脑,一度使调试过程误入歧途。

那么怎么来确定我当前所加载的类是位于哪个路径或者存在于哪个jar包当中呢?Java语言给我们的解决方案如下代码所示:

importjava.security.CodeSource;
importjava.security.ProtectionDomain;

importorg.apache.commons.lang.StringUtils;

/*** 判断类是从哪个jar包中加载的
* @authorWinter Lau
*/
public classTest {

public static voidmain(String[] args) {
  ProtectionDomain pd = StringUtils.class.getProtectionDomain();
  CodeSource cs =pd.getCodeSource();
  System.out.println(cs.getLocation());
}
}

这段代码在我的机器上运行的结果是:

file:/D:/PROJECTS/JAVA/DLOG4J_JAVAYOU/webapp/WEB-INF/lib/commons-lang-1.0.1.jar

这就是StringUtils这个类所在的jar包,一目了然。但是有一个限制经由系统类加载器所加载的类不能使用该方法来获取路径,假如你对 String类做上面的测试就会发生空指针异常,因为所得到的CodeSource为空,你可以在程序启动的时候使用-verbose来查看系统类的装载信息,使用方式有如:

java -verbose MyApp

免责声明:文章转载自《【转】查看java类是从哪个包加载》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Sql日期时间格式转换;取年 月 日,函数:DateName()、DATEPART()宏定义。字符串拼接和字符串整形转字符串下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Spring对外部属性文件指定的某个属性进行加密、解密

[From] http://blog.csdn.net/ethanq/article/details/7333897 在我们开发当中,经常会用到spring框架来读取属性文件的属性值,然后使用占位符引用属性文件的属性值来简化配置以及使配置具有更高的灵活性和通用性。   如下面的属性配置文件:db.properties    #数据库配置   db.dri...

Python Flask如何开发以太坊智能合约

将数据存储在数据库中是任何软件应用程序不可或缺的一部分。无论如何控制该数据库都有一个该数据的主控。区块链技术将数据存储到区块链网络内的区块中。因此,只要某个节点与网络同步,它们就会获得区块中数据的副本。因此,该技术中没有特定的数据主控。 在本教程中,我们将编写一份智能合约(我将进一步解释),以便在区块链上保留用户数据。我们将使用python web3(we...

Java编程技巧:if-else优化实践总结归纳

文/朱季谦 说实话,其实我很讨厌在代码里大量使用if-else,一是因为该类代码执行方式属于面向过程的,二嘛,则是会显得代码过于冗余。这篇笔记,主要记录一些自己在工作实践当中针对if-else的优化心得,将会不定期地长期更新。 一、使用策略枚举来优化if-else 看到网上蛮多人推荐使用策略模式来优化if-else,但我总觉得,搞一堆策略类来优化大批量if...

StringUtils.hasText()

1、org.springframework.util包下的 StringUtils.hasText()StringUtils.hasText():如果字符序列不为 null 值,并且字符序列的长度大于 0 ,并且不含有空白字符序列,则返回 true public static voidmain(String[] args) { Boolea...

apache StringUtils 工具类

// org.apache.commons.lang3.StringUtils // 1.IsEmpty/IsBlank - checks if a String contains text 检查是否为空 boolean empty = StringUtils.isEmpty(""); // 调用cs == null || cs.length()...

Java StringUtils 判断String类型是否为空或非空

StringUtils 方法的操作对象是 Java.lang.String 类型的对象,是 JDK 提供的 String 类型操作方法的补充,并且是 null 安全的(即如果输入参数 String 为 null 则不会抛出 NullPointerException ,而是做了相应处理,例如,如果输入为 null 则返回也是 null 等,具体可以查看源代码...