两个具有相同的名称在CLASSPATH中的类
如果我有两个名称相同的类说在我的类路径的两个不同的JAR将拾起JVM Matcher.java,反正是有,我可以建议JVM选择一个特定的呢?
4条回答
回答#1
引述甲骨文 :
规范秩序
您指定多个类路径项的顺序是很重要的。 Java解释器将查找的目录中的类,它们在类路径变量中出现的顺序。在上面的例子中,Java解释器将首先查找所需目录中的C类: JAVA MyClasses。只有当它没有找到一个适当的名称,在该目录的类口译看看在C: JAVA OtherClasses目录。
这个例子中提到:
C:> Java的类路径C: JAVA MyClasses C: JAVA OtherClasses ...
所以,是的,它会加载一个,先指定的类路径中出现。
回答#2
还有一种方法,为您指定的类应该选择从..您可以创建自己的类加载器加载类,根据您的要求。
你可以使用你的类加载2种方式
- Pass it as a parameter to jvm (
java -Djava.system.class.loader =com.somepackage.YourCustomClassLoader com.somepackage.YourMainClass
) - Use the class loader programatically to load a specific class (refer the links provided).
这里的类加载一些有用的链接
- Oracle - How to write your own class loader
- A very nice post on writing custom class loader
回答#3
在classpath中找到的第一个。即,第一个JAR包含您的类将被使用。
你无法控制它从JVM内,但可以控制的classpath -确保你想要的是一个上市/在classpath中首先发现。
回答#4
使用它时使用的类的完全限定路径。但是,如果你是指具有相同的名称类,也具有相同的封装 - 修复类路径。