javanosuchmethoderror-金沙1005

javanosuchmethoderror_error java compilation failed背景abstractmethoderror异常对于我来说还是比较不常遇见的,最近有幸遇到,并侥幸的解决了,在这里把此种场景剖析一番,进入正题,下面是abstractmethoderror在java的异常机制中所处的位置:现在明确了abstractmethoderror所具有的特性:1.它是error的子类,error类及其子类都是被划分在非检查异常之列的,就是说这些异常不能在编译阶段被检查…

背景

abstractmethoderror异常对于我来说还是比较不常遇见的,最近有幸遇到,并侥幸的解决了,在这里把此种场景剖析一番,进入正题,下面是abstractmethoderror在java的异常机制中所处的位置:

abstractmethoderror类图

现在明确了abstractmethoderror所具有的特性:

1.它是error的子类,error类及其子类都是被划分在非检查异常之列的,就是说这些异常不能在编译阶段被检查出来,只能在运行时才会触发。

2.通过api文档里面的解释大致得出的结论就是说a依赖于b,但是执行的时候发现类b的定义发生了改变,这个改变是针对编译的时候发生了改变,也就是说将类a由java文件编译成.class文件的时候用到了类b的class文件,但是在执行的时候jvm发现真正用到的b的class文件和编译的时候用的不是一个了。于是这个异常就被抛了出来。

至此,abstractmethoderror发生的底层原因也了解的差不多了,再往深层的话就是java的编译机制,以及java代码的执行检查这些更靠近虚拟机的东东,那些我也没什么研究,暂且不表。

底层原因了解了,我们继续谈下平常遇到的更直观的场景:

classa ->classb  classa 依赖于classb,通常a是我们自己开发的类,而b则是引用的第三方jar包里面的类。我们的项目中又存在classb的多个版本,比如:1.0,1.2,2.0等版本,通常主版本号发生了改变的话,一般都是不兼容的。

类a

class a { 
   
	b dependency = new bimpl();
	
	public void testmethod(){ 
   
		dependency.changedmethodindifversion(arg1, arg2);
	}
}
javanosuchmethoderror_error java compilation failed

为防止网络爬虫,请关注公众号回复”口令”

激活idea 激活clion
datagrip dataspell
dotcover dotmemory
dottrace goland
phpstorm pycharm
resharper reshac
rider rubymine
webstorm 全家桶

1.0版本的类b:

abstract class b { 
   
    public abstract void changedmethodindifversion(int arg1);
}

2.0版本的classb:

abstract class b { 
   
    public abstract void changedmethodindifversion(int arg1, string arg2);
}

如果在编译的时候使用的2.0版本中的这个classb,然而执行的时候使用的又是1.0版本的classb,那么就会抛出abstractmethoderror,这个异常抛出以后会把运行时真正找到的那个方法签名给打印出来的,异常信息会入下:

exception in thread xxxxx java.lang.abstractmehoderror package.class.运行时实际找到的方法

这个时候在你的classpath中寻找这个类,剔除掉不需要的版本就可以了。

js555888金沙老品牌的版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由思创斯整理,转载请注明出处:https://ispacesoft.com/141429.html

(0)

相关推荐

  • java中枚举的用法总结_java 枚举类型java开发中的枚举类型定义了一个枚举值的列表,每个值是一个标识符。例如,下面的语句声明了一个枚举类型,用来表示星期的可能情况:publicenumday{sunday,monday,tuesday,wednesday,thursday,friday,saturday}实际上,这个声明定义的类型是一个类,它有7个实例。因此,在比较两个枚举类型的值时,永远不需要调用equals,…

  • 字符串 压缩 java_简单的java字符串压缩(原创)[亲测有效]复制内容到剪贴板代码:packageorg.test;/***面试题目:现有一个字符串,其内容仅仅包含a—z,现在要进行网络传输,故需要减少网络传输的*大小,如何将字符串空间缩小。以下为我给出的答案,可能不对,欢迎探讨。(求最优方式)*/publicclasscontraction{publicstaticstringtempstring=”acdesfghsadajfk…

  • 17java类与对象&构造器
    类与对象的关系 **类是对象的模板!!!**类是对对象的抽象;对象是具体的实例。 类是一种抽象的数据类型,它是对某一类事物整体的描述/或定义,并不能代表某一个具体的事物; 动物,手机,person类,car类………… 对象是抽象概念的具体实例。能够体现出特点,展现出功能的是具体的实例 …

  • 图书销售系统java代码_图书借阅管理系统java代码项目描述本系统是基于jsp的网上图书销售,有比较符合初学者的简单而又不单一的界面,也有繁琐而又不过于抽象的后台数据处理。包含分类的登录用户(用户与管理员权限与界面不一),功能,登录与未登录有相应的权限设置,正常用户的图书检索与添加购物车、购买等操作。管理员可管理后台的各种信息。数据库中包含触发器用于图表的更新。作为平时与数据库、javaweb等相关的课程设计、大作业,特别适合初学者学习。奉上(包…

  • double转string java_java中double转intstringarea=util.null2string((string)detailmap.get(“yyzmjhmdm”));c_store_area=double.parsedouble(area);//string转doublelogger.info(“店铺营业总面积:” c_store_area);stringsellingarea=util.null2string((string)detailmap.get(“yymjmdm”));c_store_sellin.

    2022年12月27日
  • java程序员常用软件目录1、ide2、应用服务器3、分布式版本控制4、项目管理5、数据库管理工具6、web服务器7、接口测试工具8、ssh工具9、抓包工具10、其他一些软件工欲善其事必先利其器,作为有多年开发经验的java程序员,应该都会有一些常用的软件来辅助自己的工作,下面分享从业几年来一直在用的一些软件。1、ideeclipseeclipse是一…

    2022年11月30日
  • log4j 2 杀不死 java!作者:erik costlow 译者:弯月 原文:https://foojay.io/today/log4j-isnt-killing-java/ 译文:https://blog.csdn.net/c

  • java如何通过绝对路径和相对路径读取文件数据_servlet相对路径和绝对路径0x00前言当我在写java的数据库连接时,希望通过使用文件的相对路径来读取信息,因为使用绝对路径时在代码移植之后就会出现问题,这不是一个好的方法0x01概念绝对路径:在我们平时使用计算机时要找到需要的文件就必须知道文件的位置,而表示文件的位置的方式就是路径相对路径:由这个文件所在的路径引起的跟其它文件(或文件夹)的路径关系0x02java通过绝对路径读取文件…

    2022年11月16日

发表回复

您的电子邮箱地址不会被公开。

联系金沙1005

关注“java架构师必看”公众号

回复4,添加站长微信。

附言:ispacesoft.com网而来。

关注微信
网站地图