Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-为什么此输入不生成ClassNotFoundException_Java_Reflection_Classnotfoundexception_Linkageerror - Fatal编程技术网

Java-为什么此输入不生成ClassNotFoundException

Java-为什么此输入不生成ClassNotFoundException,java,reflection,classnotfoundexception,linkageerror,Java,Reflection,Classnotfoundexception,Linkageerror,当我使用反射时,我发现了这个错误。我有一个名为Test1的类,当我试图通过输入Test1作为class.forName()的输入来获取该类的类对象时,它会生成LinkageError而不是ClassNotFoundException。为什么小写字母会混淆程序并阻止它生成通常的ClassNotFoundException,例如“sjghdjgh” 最小示例 主要 测试1 如果您向一些文件系统询问test1.class,它们将返回一个test1.class,而不是一个找不到的文件(因为它们不区分大小

当我使用反射时,我发现了这个错误。我有一个名为Test1的类,当我试图通过输入Test1作为class.forName()的输入来获取该类的类对象时,它会生成LinkageError而不是ClassNotFoundException。为什么小写字母会混淆程序并阻止它生成通常的ClassNotFoundException,例如“sjghdjgh”

最小示例

主要

测试1


如果您向一些文件系统询问
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 {
}