Java例外:java lang NoSuchMethodError
您還可能在執(zhí)行沒有公共static void main()方法的類時拋出此錯誤。要了解其背后的原因,請閱讀本文。
當(dāng)您嘗試調(diào)用某個類中不再可用的方法時,那么在編譯時本身將顯示一條錯誤消息“找不到符號”。 因此,您可能會認(rèn)為啟動程序或應(yīng)用程序時會引發(fā)此錯誤。
我已經(jīng)使用以下程序解釋了此問題背后的事實(shí)。
讓我們有一個如下的Nomethod和Pro1類,
方法類:
import java.util.*;class Nomethod{public static void main(String args[]){Pro1 s=new Pro1();s.display();} }Pro1類別:
class Pro1{public void display(){System.out.println("I am inside display");} }當(dāng)您執(zhí)行該程序時,它可以正常工作而不會顯示任何錯誤。現(xiàn)在看看當(dāng)我按如下方式更改Pro1類并單獨(dú)編譯該類時會發(fā)生什么。
范例1:
class Pro1 { }范例2:
class Pro1{public int void display(){System.out.println("I am inside display");return 1; // for example i have included a statement like this} }現(xiàn)在,如果您執(zhí)行類Nomethod而不重新編譯它,那么在運(yùn)行時此java.lang.NoSuchMethodError將使您感到尷尬。
1.如果如示例1所示更改類Pro1,則將拋出此異常,因?yàn)樵擃愔袥]有可用的方法display()。
2.如果考慮使用Example2,則會引發(fā)此錯誤,因?yàn)榉椒╠isplay()的簽名已更改。
如果您理解了這些示例,那么您可能已經(jīng)理解了執(zhí)行沒有main()方法的類時引發(fā)此錯誤的原因。 真正的事實(shí)是“與現(xiàn)有二進(jìn)制文件(類)的二進(jìn)制兼容性已被新的二進(jìn)制文件(修改后的類)損害了”。
“當(dāng)您更改方法的簽名或刪除特定類中的方法時,并單獨(dú)對其進(jìn)行編譯,那么其他調(diào)用該方法的類將不知道該方法的狀態(tài),從而導(dǎo)致在運(yùn)行時拋出此錯誤-時間。
同樣的情況也適用于接口,“那時,如果您嘗試更改方法的簽名或刪除接口中的方法”,也會拋出此異常。
有什么解決方案?
“如果您重新編譯了另一個類,則該類將在該類或接口中調(diào)用此修改的方法或已刪除的方法”,則此錯誤將在編譯時顯示,您可以執(zhí)行必要的步驟來解決它。
注意:考慮到這種情況,即使您重新編譯該類,情況也可能變得更糟,您將不會收到此錯誤的提示。
舉例來說,您在項(xiàng)目中包含了較舊版本的軟件包,并將其放置在擴(kuò)展庫中。您還擁有了較新的軟件包(其中方法的簽名已更改),并且您已經(jīng)包含了該軟件包在課程路徑中。
編譯類時,編譯器將在擴(kuò)展庫和引導(dǎo)程序庫中搜索類以解析引用,但Java虛擬機(jī)僅在已指定的類路徑(對于第三方庫)中搜索。
因此,在您的應(yīng)用程序中使用新程序包時,請確保已修改了與舊版本相關(guān)的設(shè)置,并閱讀了新程序包的文檔以了解此程序包中所做的更改。
參考:來自Java錯誤和異常博客的JCG合作伙伴 Ganesh Bhuddhan提供的java.lang.NoSuchMethodError 。
翻譯自: https://www.javacodegeeks.com/2012/08/java-exception-java-lang.html
總結(jié)
以上是生活随笔為你收集整理的Java例外:java lang NoSuchMethodError的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 搓泥宝搓下来的是泥吗 搓泥宝搓下来的是不
- 下一篇: 饥荒电脑版134052mod(饥荒电脑版