[英]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.