Java - 为什么此输入不生成 ClassNotFoundException
Java - why does this input not generate ClassNotFoundException
当我使用反射时,我遇到了这个错误。我有一个名为 Test1 的 class,当我尝试通过输入 test1 作为 Class.forName() 的输入来获取它的 Class 对象时,它会生成 LinkageError 而不是 ClassNotFoundException .为什么小写字母会混淆程序并阻止它生成通常的 ClassNotFoundException,例如 "sjghdjgh"?
最小示例
主要
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());
}
}
}
测试 1
public class Test1 {
}
如果你向某些文件系统询问 test1.class
,他们会给你一个 Test1.class
而不是找不到文件(因为它们不区分大小写)然后 class 文件不包含名为 test1
的 class,而是包含 Test1
(Java class 名称区分大小写),因此 class加载程序错误。
这在实践中很少成为问题,因为大多数应用程序都是使用 Jar 文件部署的(因此文件系统中的 classes 没有单独的文件)。
当我使用反射时,我遇到了这个错误。我有一个名为 Test1 的 class,当我尝试通过输入 test1 作为 Class.forName() 的输入来获取它的 Class 对象时,它会生成 LinkageError 而不是 ClassNotFoundException .为什么小写字母会混淆程序并阻止它生成通常的 ClassNotFoundException,例如 "sjghdjgh"?
最小示例
主要
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());
}
}
}
测试 1
public class Test1 {
}
如果你向某些文件系统询问 test1.class
,他们会给你一个 Test1.class
而不是找不到文件(因为它们不区分大小写)然后 class 文件不包含名为 test1
的 class,而是包含 Test1
(Java class 名称区分大小写),因此 class加载程序错误。
这在实践中很少成为问题,因为大多数应用程序都是使用 Jar 文件部署的(因此文件系统中的 classes 没有单独的文件)。