Статьи

Исключение: java lang AbstractMethodError

Этот java.lang.AbstractMethodError обычно генерируется, когда мы пытаемся вызвать абстрактный метод. Обычно эта ошибка выявляется во время компиляции, если эта ошибка генерируется во время выполнения, класс должен быть несовместим (несовместим с существующими классами). ) Изменено. Но это подкласс ошибки IncompatibleClassChange.
Мы знаем, что абстрактный метод не может быть вызван, и если мы попытаемся это сделать, вы получите ошибку во время компиляции. Так что вы можете подумать, как эта ошибка генерируется во время выполнения ?.
Причина — двоичная несовместимостьчто это значит?
Всякий раз, когда класс изменяется, другие классы, которые ссылаются на этот (измененный) класс, не будут знать об изменениях, сделанных в нем. Поэтому все классы должны быть скомпилированы как единое целое. Если нет, то вы можете столкнуться с одним из подклассов несовместимой ошибки изменения класса.

« Эта ошибка указывает на то, что вызываемый вами метод теперь преобразуется в абстрактный метод».
см. следующий пример, чтобы иметь представление об этой ошибке
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
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();
}
}

Выход:

1
2
3
4
C:\blog>javac A.java
 
C:\blog>java A
I am inside B

Теперь я собираюсь преобразовать метод display () как абстрактный метод и скомпилировать его самостоятельно.

1
2
3
4
abstract class B
{
public abstract void display();
}

Выход:

01
02
03
04
05
06
07
08
09
10
11
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.lang.AbstractMethodError от нашего партнера по JCG Ганеша Буддхана в блоге об ошибках и исключениях java .