import java.net.URL;
import java.util.*;
public class etst {
public static void checkDuplicate(Class cls) {
checkDuplicate(cls.getName().replace('.', '/') + ".class");
}
public static void checkDuplicateByName(String className) {
System.err.println("checkDuplicate");
checkDuplicate(className.replace('.', '/') + ".class");
}
public static void checkDuplicate(String path) {
try {
// 在ClassPath搜文件
System.err.println("checkDuplicate");
Enumeration<URL> urls = Thread.currentThread().getContextClassLoader().getResources(
path);
Set files = new HashSet();
while (urls.hasMoreElements()) {
URL url = urls.nextElement();
if (url != null) {
String file = url.getFile();
if (file != null && file.length() > 0) {
System.err.println("Duplicate class " + path + " in " + files.size()
+ " jar " + url);
files.add(file);
}
}
}
// 如果有多个,就表示重复
if (files.size() > 1) {
System.err.println("Duplicate class " + path + " in " + files.size() + " jar "
+ files);
}
} catch (Throwable e) { // 防御性容错
System.err.println(e.getMessage());
}
}
public static void main(String[] args){
checkDuplicateByName("java.lang.String");
}
}
输出结果:
checkDuplicate
checkDuplicate
Duplicate class java/lang/String.class in 0 jar jar:file:/usr/lib/jvm/java-6-sun-1.6.0.24/jre/lib/rt.jar!/java/lang/String.class
分享到:
相关推荐
这意味着当一个ClassLoader尝试加载某个类时,它首先会将任务委托给其父ClassLoader。如果父ClassLoader找不到该类,子ClassLoader才会尝试自己去加载。这个机制保证了系统类(如`java.lang.Object`)只被加载一次,...
在Java编程语言中,ClassLoader是核心组件之一,它负责加载类到JVM(Java虚拟机)中执行。本文将深入探讨ClassLoader的工作原理和类加载机制,帮助开发者理解这个至关重要的概念。 1. 类加载机制概述 Java的类加载...
每个ClassLoader都有其父ClassLoader,它们形成了一个层次结构,子ClassLoader可以委托父ClassLoader去加载类,避免了类的重复加载。 在Java中,类的加载通常遵循“双亲委派模型”。这个模型的工作原理是:当一个...
1. **引导类加载器(Bootstrap ClassLoader)**:这是最基础的类加载器,负责加载Java的核心库类,如`java.lang`包下的类。 2. **扩展类加载器(Extension ClassLoader)**:它负责加载位于`-Djava.ext.dirs`系统...
每个版本的库可以有专属的Classloader,确保它们各自加载各自的类,防止版本冲突。 六、动态加载与卸载 自定义Classloader还可以实现动态加载和卸载类的功能。在某些场景下,比如插件系统,我们需要在运行时加载或...
在类加载过程中,遵循“双亲委派模型”:当一个类加载器需要加载某个类时,它首先会委托它的父加载器尝试加载,只有当父加载器无法加载时,当前加载器才会尝试自己加载。这种机制避免了类的重复加载,并确保了核心...
3. 如果类还未加载,ClassLoader会在指定的路径(例如类路径,classpath)下寻找对应的.class文件。 4. 找到类文件后,ClassLoader读取文件内容并将其转换为字节码。 5. 接下来,字节码会被验证确保符合Java语言规范...
在Java编程语言中,ClassLoader是一个至关重要的组成部分,它负责加载类到JVM(Java虚拟机)中,使得程序能够执行。本示例"ClassLoader小例子"将深入探讨这个概念,并通过一个具体的程序来演示其工作原理。下面我们...
2. **避免重复加载**: 由于每个类加载器都有一个缓存机制,因此在同一个类加载器环境下不会出现多次加载相同类的情况。 #### 五、Java类加载器层次结构 Java类加载器主要包括三种类型: 1. **启动(Bootstrap)类...
1. 每个OSGi bundle都有自己的ClassLoader,用于加载该bundle中的类,这使得不同bundle之间的类隔离得以实现,避免了类冲突。 2. OSGi的ClassLoader支持动态加载和卸载bundle,当bundle被激活或停用时,对应的类...
在Java编程语言中,ClassLoader是核心组件之一,它负责加载类到JVM(Java虚拟机)中。理解ClassLoader的工作机制以及类变量初始化的顺序对于深入理解Java运行时环境至关重要。这篇博文将探讨这两个主题。 首先,让...
了解和掌握ClassLoader的工作原理以及如何自定义ClassLoader对于深入理解Java应用程序的运行机制非常有帮助。以下是对ClassLoader API的使用和自定义的详细说明。 首先,我们来看ClassLoader的基本概念。在Java中,...
2. Extension ClassLoader:扩展类加载器,负责加载JRE的扩展目录(jre/lib/ext目录下的jar文件)。 3. AppClassLoade:应用程序类加载器,也叫系统类加载器,负责加载用户类路径(classpath)上的类。 在Java中,...
《深入理解ClassLoader工作机制》 Java虚拟机(JVM)中的ClassLoader是负责加载类到内存中的核心组件。...总的来说,深入理解ClassLoader的内部运作,有助于我们更好地理解和利用Java平台的强大功能。
当需要加载一个类时,ClassLoader首先检查该类是否已经加载。如果未加载,它会委托给父ClassLoader加载。这种委托加载机制保证了类的唯一性,防止了同一个类被不同ClassLoader加载两次的问题。 ClassLoader还有...
Java的类加载器(ClassLoader)体系结构是JVM(Java虚拟机)中至关重要的一部分,它负责将类的字节码转换为运行时的类实例。本文将深入探讨启动类加载器、扩展类加载器、系统类加载器以及用户自定义类加载器,同时还...
在Java中,类加载器主要有三层:Bootstrap ClassLoader(引导类加载器)、Extension ClassLoader(扩展类加载器)和App ClassLoader(系统类加载器)。Bootstrap ClassLoader负责加载JDK的核心库,Extension ...