AbstractMethodError那些事

AbstractMethodError那些事Java社区添加小编微信进入java学习交流群,小编微信:372787553,备注进群AbstractMethodErrorExceptioninthread“main”java.lang.AbstractMethodError这样的异常并不常见,如果您有幸遇到了,那么一定要珍惜,否则转瞬即逝!发生原因为什么会发生这样的错误?让我们看一下官方的解释:当应用程序尝试调用抽象方法时抛出。通常,该错误被编译器捕获;如果某些类的定义自上次编译当前执行的方法以来不兼容地更改,则此错误只能

大家好,又见面了,我是你们的朋友全栈君。

Java社区

添加小编微信进入java学习交流群,小编微信:372787553,备注进群

AbstractMethodError

Exception in thread “main” java.lang.AbstractMethodError 这样的异常并不常见,如果您有幸遇到了,那么一定要珍惜,否则转瞬即逝!

发生原因

为什么会发生这样的错误?

让我们看一下官方的解释:

当应用程序尝试调用抽象方法时抛出。 通常,该错误被编译器捕获; 如果某些类的定义自上次编译当前执行的方法以来不兼容地更改,则此错误只能在运行时发生。

AbstractMethodError 结构

在这里插入图片描述

演示错误以及解决方案

创建V1.0抽象接口并实现

abstract class B {
    // v1.0
    public abstract void changedMethodInDifVersion(int arg1);

}

class BImpl extends B{

    @Override
    public void changedMethodInDifVersion(int arg1) {
        System.out.println("结果为:"+arg1);
    }
}

验证

验证代码

public class MainTest {

    public static void main(String[] args) {
        B dependency = new BImpl();
        dependency.changedMethodInDifVersion(1);
    }

}

结果

在这里插入图片描述

以上的代码都可以正常运行,接下来我们对接口进行升级改造

创建V2.0抽象接口并实现

abstract class B {
    // v1.0
//    public abstract void changedMethodInDifVersion(int arg1);
    // v2.0
    public abstract void changedMethodInDifVersion(int arg1,int arg2);

}

class BImpl extends B{

    @Override
    public void changedMethodInDifVersion(int arg1,int arg2) {
        System.out.println("结果为:"+(arg1+arg2));
    }
}

验证

代码

public class MainTest {

    public static void main(String[] args) {
        B dependency = new BImpl();
        dependency.changedMethodInDifVersion(1,2);
    }
}

结果

神奇的发生了错误

在这里插入图片描述

为何会发生错误的错误,是不是很尴尬,竟然中招了?

来让我们看看具体的报错:

Exception in thread "main" java.lang.AbstractMethodError: Receiver class com.javayh.json.test.BImpl does not define or inherit an implementation of the resolved method 'abstract void changedMethodInDifVersion(int, int)' of abstract class com.javayh.json.test.B.
	at com.javayh.json.test.MainTest.main(MainTest.java:16)

我们可以看到does not define or inherit an implementation of the resolved method 'abstract void changedMethodInDifVersion(int, int)' of abstract class 这样的提示,但是我们已经继承了该类的方法?那么错误肯定不在我们的代码,而在他编译解析的地方出了错误!接下来我们看看编译后的源码;

在这里插入图片描述

神奇的发现,BImpl 内的方法并没编译成功,这样我们重新进行编译,javac一下

在这里插入图片描述

这是我们我们发现错误已经解决,可以正常的运行!

为何会这样?其实在文章的起始位置已经说了发生原因,这是我们在来理解一下:

当应用程序尝试调用抽象方法时抛出。 通常,该错误被编译器捕获; 如果某些类的定义自上次编译当前执行的方法以来不兼容地更改,则此错误只能在运行时发生。

理解:

  • 该错误被编译器捕获:

    现在的开发工作已经都转向了各种开发工具,这样的错误应该不会发生,大佬们使用记事本写代码 时,很有可能发生

  • 如果某些类的定义自上次编译当前执行的方法以来不兼容地更改

    当我们对原有的方法进行了升级改造,开发工具为我躲避了第一步的错误,但是并没有办法完全的躲避编译时的错误,这时我们执行就会报如上的错误了,这时候我们只需要重新执行编译一下 javac/mvn compile

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

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/138687.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 秒懂JSONArray和JSONObject的区别和使用

    秒懂JSONArray和JSONObject的区别和使用一.JSONObject是什么?就是对象json;之前在秒懂json中说过,{}表示对象,所以JSONObject就是:{"name":"tom"}同时,这里的对象Json通过添加数组json可以变成对象数组json:{"name":["tome","kate"]}例如:JSONObjectjsono=newJSONObject();JSONArray jsona=…

    2022年6月7日
    32
  • oracle创建表空间的SQL语句

    oracle创建表空间的SQL语句oracle创建表空间语句:createtablespaceshopping–创建一个叫shopping的表空间datafile’shopping.dbf’–物理文件名size50m–大小autoextend…

    2022年7月27日
    4
  • css分页效果_asp中数字分页样式

    css分页效果_asp中数字分页样式CSS分页实例简单分页如果你的网站有很多个页面,你就需要使用分页来为每个页面做导航。ul.pagination{display:inline-block;padding:0;marg

    2022年8月6日
    2
  • Unable to process Jar entry [module-info.class] from Jar的问题解决

    Unable to process Jar entry [module-info.class] from Jar的问题解决UnabletoprocessJarentry[module-info.class]fromJar的问题解决背景解决办法背景在使用Eclipse进行SpringBoot应用开发时,如果项目启动是RunAs->RunOnServer方式运行就会报类似于UnabletoprocessJarentry[module-info.class]fromJar的错误…

    2022年9月28日
    1
  • Mybatis的多表关联查询(多对多)「建议收藏」

    Mybatis的多表关联查询(多对多)「建议收藏」Mybatis的多表关联查询(多对多)项目目录结构实现Role到User多对多业务要求用户与角色的关系模型编写角色实体类编写Role持久层接口实现的SQL语句编写映射文件测试代码实现User到Role的多对多业务要求编写用户实体类编写User持久层接口实现的SQL语句编写映射文件测试代码mybatis中的多表查询: 示例:用户和角色 一个用户可以有多个角色 一个角色可以赋予多个用户 步骤: 1、建立两张表:用户表,角色表 让用户表和角色表具有多对多的关

    2022年5月1日
    49
  • Hadoop 简介

    Hadoop 简介Hadoop是什么Hadoop是一个提供分布式存储和计算的开源软件框架,它具有无共享、高可用(HA)、弹性可扩展的特点,非常适合处理海量数量。Hadoop是一个开源软件框架Hadoop适

    2022年7月2日
    21

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号