最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java AbstractMethodError案例分析詳解

 更新時間:2021年08月23日 10:24:33   作者:liunim90  
這篇文章主要介紹了Java AbstractMethodError案例分析詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下

背景

AbstractMethodError異常對于我來說還是比較不常遇見的,最近有幸遇到,并僥幸的解決了,在這里把此種場景剖析一番,進入正題,下面是AbstractMethodError在Java的異常機制中所處的位置:

AbstractMethodError類圖

現(xiàn)在明確了AbstractMethodError所具有的特性:

1.它是Error的子類,Error類及其子類都是被劃分在非檢查異常之列的,就是說這些異常不能在編譯階段被檢查出來,只能在運行時才會觸發(fā)。

2.通過API文檔里面的解釋大致得出的結(jié)論就是說A依賴于B,但是執(zhí)行的時候發(fā)現(xiàn)類B的定義發(fā)生了改變,這個改變是針對編譯的時候發(fā)生了改變,也就是說將類A由java文件編譯成.class文件的時候用到了類B的class文件,但是在執(zhí)行的時候JVM發(fā)現(xiàn)真正用到的B的class文件和編譯的時候用的不是一個了。于是這個異常就被拋了出來。

至此,AbstractMethodError發(fā)生的底層原因也了解的差不多了,再往深層的話就是java的編譯機制,以及java代碼的執(zhí)行檢查這些更靠近虛擬機的東東,那些我也沒什么研究,暫且不表。

底層原因了解了,我們繼續(xù)談下平常遇到的更直觀的場景:

ClassA ->AbstractClassB  ClassA 依賴于AbstractClassB,通常A是我們自己開發(fā)的類,而B則是引用的第三方j(luò)ar包里面的抽象類。我們的項目中又存在AbstractClassB的多個實現(xiàn)版本,比如:1.0,1.2,2.0等版本,通常主版本號發(fā)生了改變的話,一般都是不兼容的。

類A

class A {
	B dependency = new BImpl();
	
	public void testMethod(){
		dependency.changedMethodInDifVersion(arg1, arg2);
	}
}

1.0版本的AbstractClassB:

abstract class B {
    // v1.0
    public abstract void changedMethodInDifVersion(int arg1);
}
 
class BImpl extends B{
    public void changedMethodInDifVersion(int arg1){
        System.out.prinln("我是AbstractClassB 的 1.0 版本實現(xiàn),Class A編譯的時候我沒參與,但是Class A運行的時候我卻參與了。");        
    }
}

2.0版本的AbstractClassB:

abstract class B {
    //v2.0
    public abstract void changedMethodInDifVersion(int arg1, String arg2);
}
 
class BImpl extends B{
    public void changedMethodInDifVersion(int arg1, String arg2){
        System.out.prinln("我是AbstractClassB 的 2.0 版本實現(xiàn),編譯的時候是我參與了編譯");        
    }
}

如果在編譯的時候使用的2.0版本中的BImpl和2.0版本的AbstractClassB,然而執(zhí)行的時候使用的又是1.0版本的BImpl,那么就會拋出AbstractMethodError,這個異常拋出以后會把運行時真正找到的那個方法簽名給打印出來的,異常信息會入下:

Exception in Thread XXXXX java.lang.AbstractMehodError  package.Class.運行時實際找到的方法

這個時候在你的classpath中尋找這個類,剔除掉不需要的版本就可以了。

如果在編譯的時候使用的2.0版本中的BImpl和2.0版本的AbstractClassB,然而執(zhí)行的時候使用的又是1.0版本的BImpl 和 1.0版本的AbstractClassB,就會報NoSuchMethodError。

到此這篇關(guān)于Java AbstractMethodError案例分析詳解的文章就介紹到這了,更多相關(guān)Java AbstractMethodError詳解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于SpringMVC的全局異常處理器介紹

    基于SpringMVC的全局異常處理器介紹

    下面小編就為大家?guī)硪黄赟pringMVC的全局異常處理器介紹。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • Java獲取HttpServletRequest的三種方法詳解

    Java獲取HttpServletRequest的三種方法詳解

    這篇文章主要介紹了Java獲取HttpServletRequest的三種方法詳解,是一個接口,全限定名稱為Jakarta.Serclet.http.HttpServletRequest
    HttpServletRequest接口是Servlet規(guī)范的一員,需要的朋友可以參考下
    2023-11-11
  • Java源碼解析HashMap簡介

    Java源碼解析HashMap簡介

    今天小編就為大家分享一篇關(guān)于Java源碼解析HashMap簡介,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • 如何在MyBatis中實現(xiàn)DataSource

    如何在MyBatis中實現(xiàn)DataSource

    今天給大家整理了如何在MyBatis中實現(xiàn)DataSource,文中有非常詳細的代碼示例,對正在學習java的小伙伴們很有幫助,需要的朋友可以參考下
    2021-06-06
  • Dubbo無法訪問遠程Zookeeper已注冊服務(wù)的問題解決方案

    Dubbo無法訪問遠程Zookeeper已注冊服務(wù)的問題解決方案

    今天小編就為大家分享一篇關(guān)于Dubbo無法訪問遠程Zookeeper已注冊服務(wù)的問題解決方案,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • Java數(shù)據(jù)結(jié)構(gòu)之圖的原理與實現(xiàn)

    Java數(shù)據(jù)結(jié)構(gòu)之圖的原理與實現(xiàn)

    圖(Graph)是由頂點的有窮非空集合和頂點之間邊的集合組成,通常表示為:G(V,E),其中,G表示一個圖,V是圖G中頂點的集合,E是圖G中邊的集合。本文將詳細介紹圖的原理及其代碼實現(xiàn),需要的可以參考一下
    2022-01-01
  • 4種java復制文件的方式

    4種java復制文件的方式

    本篇文章列舉了4種最受歡迎的java復制文件的方式,復制文件是一個重要的操作,需要的朋友可以參考下
    2015-07-07
  • 使用springboot的jar包能夠以service方式啟動

    使用springboot的jar包能夠以service方式啟動

    這篇文章主要介紹了使用springboot的jar包能夠以service方式啟動,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • java使用Nagao算法實現(xiàn)新詞發(fā)現(xiàn)、熱門詞的挖掘

    java使用Nagao算法實現(xiàn)新詞發(fā)現(xiàn)、熱門詞的挖掘

    這篇文章主要介紹了java使用Nagao算法實現(xiàn)新詞發(fā)現(xiàn)、熱門詞的挖掘的思路和詳細代碼,需要的朋友可以參考下
    2015-07-07
  • Java利用ITextPdf庫生成PDF預覽文件的具體實現(xiàn)

    Java利用ITextPdf庫生成PDF預覽文件的具體實現(xiàn)

    這篇文章主要給大家介紹了Java利用ITextPdf庫生成PDF預覽文件的具體實現(xiàn),文中通過代碼示例和圖文給大家介紹的非常詳細,具有一定的參考價值,需要的朋友可以參考下
    2024-04-04

最新評論

古蔺县| 元阳县| 连城县| 铜鼓县| 阿拉善左旗| 万州区| 金坛市| 连江县| 白沙| 巴彦县| 邯郸市| 鸡西市| 重庆市| 惠水县| 五峰| 玉林市| 唐山市| 巫山县| 佛山市| 佛学| 莱阳市| 宝兴县| 岳阳市| 康定县| 简阳市| 松溪县| 亳州市| 德庆县| 信阳市| 进贤县| 隆子县| 宜城市| 桐庐县| 洛扎县| 宁海县| 山丹县| 仁怀市| 通山县| 措勤县| 泽州县| 常山县|