簡體   English   中英

Java-為什么此輸入不生成ClassNotFoundException

[英]Java - why does this input not generate ClassNotFoundException

當我使用反射時,我遇到了這個錯誤。 我有一個名為Test1的類,當我嘗試通過輸入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而不是一個文件找不到的文件(因為它們不區分大小寫),然后該類文件不包含名為test1的類,而是Test1 (Java類名稱區分大小寫),以便使類加載器出錯。

實際上,這很少有問題,因為大多數應用程序都是使用Jar文件進行部署的(因此文件系統中的類沒有單獨的文件)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM