Java-为什么此输入不生成ClassNotFoundException
当我使用反射时,我发现了这个错误。我有一个名为Test1的类,当我试图通过输入Test1作为class.forName()的输入来获取该类的类对象时,它会生成LinkageError而不是ClassNotFoundException。为什么小写字母会混淆程序并阻止它生成通常的ClassNotFoundException,例如“sjghdjgh” 最小示例 主要 测试1Java-为什么此输入不生成ClassNotFoundException,java,reflection,classnotfoundexception,linkageerror,Java,Reflection,Classnotfoundexception,Linkageerror,当我使用反射时,我发现了这个错误。我有一个名为Test1的类,当我试图通过输入Test1作为class.forName()的输入来获取该类的类对象时,它会生成LinkageError而不是ClassNotFoundException。为什么小写字母会混淆程序并阻止它生成通常的ClassNotFoundException,例如“sjghdjgh” 最小示例 主要 测试1 如果您向一些文件系统询问test1.class,它们将返回一个test1.class,而不是一个找不到的文件(因为它们不区分大小
如果您向一些文件系统询问
test1.class
,它们将返回一个test1.class
,而不是一个找不到的文件(因为它们不区分大小写),然后该类文件不包含名为test1
的类,而是一个test1
(Java类名区分大小写),这样类加载器就会出错
这在实践中很少是一个问题,因为大多数应用程序都是使用Jar文件部署的(因此文件系统中的类没有单独的文件)。如果您向一些文件系统询问
test1.class
的内容,它们将返回test1.class
,而不是找不到的文件(因为它们不区分大小写)然后,该类文件不包含名为test1
的类,而是包含一个test1
(Java类名区分大小写),因此类加载器会出错
这在实践中很少是一个问题,因为大多数应用程序都是使用Jar文件部署的(因此文件系统中的类没有单独的文件).共享代码如何?可能是因为文件系统区分大小写的问题。您有完整的堆栈跟踪和异常消息吗?请发布一条消息,而不是试图描述您的代码。@DonkeyKing“这是错误。java.lang.NoClassDefFoundError”,但有疑问您会说“它生成LinkageError而不是ClassNotFoundException”,那么是哪一个呢?共享代码如何?可能是因为文件系统的大小写敏感问题。您有完整的堆栈跟踪和异常消息吗?请发布一个,而不是试图描述您的代码。@DonkeyKing“这是错误。java.lang.NoClassDefFoundError“但你说的是“它生成LinkageError而不是ClassNotFoundException”,那么是哪一个呢?如果我在Linux计算机上运行该程序(我使用windows),我会得到ClassNotFoundException?那么如果我在Linux计算机上运行该程序(我使用windows),我会得到ClassNotFoundException?
public class Main {
public static void main(String[] args) {
try {
Class.forName("test1");
}
catch (ClassNotFoundException cnfe) {
System.out.println(cnfe.toString());
}
catch (LinkageError le) {
System.out.println(le.toString());
}
}
}
public class Test1 {
}