前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >异常:java lang AbstractMethodError

异常:java lang AbstractMethodError

作者头像
全栈程序员站长
发布2022-09-05 11:00:16
1.4K0
发布2022-09-05 11:00:16
举报
文章被收录于专栏:全栈程序员必看

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

通常在尝试调用抽象方法时抛出此 java.lang.AbstractMethodError。通常,此错误是在编译时本身识别的,如果在运行时抛出此错误,则该类必须不兼容(与先前存在的类不兼容) )更改。因此,它是IncompatibleClassChange Error的子类。

我们知道不能调用抽象方法,如果尝试这样做,则会收到编译时错误,因此您可能会认为 在运行时如何抛出此错误?

原因是 二进制不兼容这是什么意思?

每当修改一个类时,引用该(修改的)类的其他类将不会意识到其中所做的更改。因此,所有类都必须作为一个整体进行编译。 如果不是,那么您可能会遇到不兼容的类更改错误的子类之一。

此错误表明您调用的方法现在已转换为抽象方法”。

请参阅以下示例,以了解有关此错误的信息

代码语言:javascript
复制
class B
{
public void display()
{
System.out.println("I am inside B");
}
}


import java.util.*;
public class A extends B
{
public static void main(String args[])
{
A a=new A();
a.display();
}
}

输出:

代码语言:javascript
复制
C:\blog>javac A.java

C:\blog>java A
I am inside B

现在,我将把display()方法转换为抽象方法,并单独进行编译。

代码语言:javascript
复制
abstract class B
{
public abstract void display();
}

输出:

代码语言:javascript
复制
C:\blog>javac A.java

C:\blog>java A
I am inside B

C:\blog>javac B.java

C:\blog>java A
Exception in thread "main" java.lang.AbstractMethodError: B.display()V
        at A.display(A.java:3)
        at A.main(A.java:8)

如您所见,在运行时引发此异常的原因是我没有将这些类作为一个整体进行编译。因此,每当对现有类进行更改时,请确保已对整个类进行了编译。

因此,将方法转换为分布式类中的抽象方法不是一个好习惯。当您在应用程序中使用第三方库时,通常会发生此类错误。

如果在编译时未显示此错误,即使您将其作为一个整体进行编译,则必须检查库设置和类路径设置。

因为编译器通常在当前目录中也在系统库(如引导程序库和扩展库)中搜索类,但是JVM在指定的类路径中搜索类。

如果您不小心将较旧的版本放置在系统库中,而将较新的版本放置在类路径中,则即使将其编译为整个软件包,也不会收到有关此错误的通知。

因此,请确保已删除与旧软件包有关的设置。

参考:来自 Java错误和异常博客的 JCG合作伙伴 Ganesh Bhuddhan提供的 java.lang.AbstractMethodError

翻译自: https://www.javacodegeeks.com/2012/08/exception-java-lang-abstractmethoderror.html

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年6月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档