


Warum tritt in Java der Fehler Java.lang.VerifyError auf und wie lässt sich dieses Problem lösen?
Java.lang.VerifyError 是由 JVM(Java 虚拟机)引发的运行时错误。在运行时,验证过程会检查加载的有效性。 class 文件,如果 .class 文件违反任何约束,那么 JVM 将给出 Java.lang.VerifyError 错误。 Java 1.0 版本及更高版本中存在以下错误。
java.lang.LinkageError 扩展了 Java.lang.VerifyError,它指的是程序的链接过程出现问题时。
Java.lang.VerifyError在输出中的样子将会是:
Exception in thread "main" java.lang.VerifyError: (class: com/example/Way2Class, method: myMethod signature: ()V) Incompatible argument to function at com.example.MyClass.main(MyClass.java:10)
此输出包含导致错误的类的名称 (Way2class)、类路径 (com/example/Way2Class)、错误行 (10)、方法名称 (myMethod) 和错误消息(线程“main”java 中的异常) .lang.VerifyError)
出现此错误的原因有多种,如下所示:
版本不匹配:需要注意的是,如果类文件是使用与执行代码所使用的Java编译器版本不同的版本进行编译的话,可能会导致VerifyError。
示例
public class VerifyErrorVersionExample { public static void main(String[] args) { System.out.println("Hello, program!"); } }
在该特定程序使用 Java 9 编译并在早期版本(例如 Java 8)上运行的情况下,输出将显示后续错误解释:
输出
Exception in thread "main" java.lang.VerifyError: Bad type on operand stack Exception Details: Location: VerifyErrorVersionExample.main([Ljava/lang/String;)V @2: invokestatic Reason: Type 'java/lang/invoke/StringConcatFactory' (current frame, stack[0]) is not assignable to 'java/lang/invoke/MethodHandle' Current Frame: bci: @2 flags: { } locals: { '[Ljava/lang/String;' } stack: { 'java/lang/invoke/StringConcatFactory' } Bytecode: 0x0000000: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream; 0x0000003: ldc #3 // String Hello, world! 0x0000005: invokestatic #4 // Method java/lang/invoke/StringConcatFactory.makeConcatWithConstants:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/MethodHandle; 0x000000a: ldc #5 // String 0x000000c: iconst_1 0x000000d: anewarray #6 // class java/lang/Object 0x0000010: dup 0x0000011: iconst_0 0x0000012: ldc #7 // String !!! 0x0000014: aastore 0x0000015: invokevirtual #8 // Method java/lang/invoke/MethodHandle.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object; 0x000001a: checkcast #9 // class java/lang/String 0x000001d: invokevirtual #10 // Method java/io/PrintStream.println:(Ljava/lang/String;)V 0x0000020: return
字节码损坏:如果对类文件的字节码进行修改或损坏,可能会出现错误。
示例
public class VerifyErrorBytecodeExample { public static void main(String[] args) { int a = 10; int b = 20; int c = a + b; System.out.println("The sum of " + a + " and " + b + " is " + c); } }
输出
Exception in thread "main" java.lang.VerifyError: (class: VerifyErrorBytecodeExample, method: main signature: ([Ljava/lang/String;)V) Illegal target of jump or branch at java.lang.Class.getDeclaredMethods0(Native Method) at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) at java.lang.Class.getDeclaredMethod(Class.java:2128) at java.io.ObjectStreamClass.getPrivateMethod(ObjectStreamClass.java:1743) at java.io.ObjectStreamClass.access$1700(ObjectStreamClass.java:72) at java.io.ObjectStreamClass$2.run(ObjectStreamClass.java:513) at java.io.ObjectStreamClass$2.run(ObjectStreamClass.java:492) at java.security.AccessController.doPrivileged(Native Method) at java.io.ObjectStreamClass.<init>(ObjectStreamClass.java:492) at java.io.ObjectStreamClass.lookup(ObjectStreamClass.java:389) at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1134) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348) at VerifyErrorBytecodeExample.main(VerifyErrorBytecodeExample.java:6)
类文件不一致:如果类文件违反了Java虚拟机规范所强制的某些约束条件。
示例
public class VerifyErrorExample { public static void main(String[] args) { Animal animal = new Cat(); animal.speak(); } } interface Animal { void speak(); } class Dog implements Animal { public void speak() { System.out.println("Woof!"); } } class Cat extends Dog { public void speak() { System.out.println("Meow!"); } }
这个程序定义了一个‘Animal’接口和两个实现它的具体类:Dog和Cat。Cat继承了Dog并重写了它的speak方法。在主方法中,我们创建了一个Cat实例并调用了它的speak方法。
假设我们选择从当前类路径中取出 Dog 类,然后重新编译并运行我们的程序,将会显示 java.lang。验证错误。此错误将显示如下错误消息:
输出
Exception in thread "main" java.lang.VerifyError: Bad type on operand stack Exception Details: Location: VerifyErrorExample.main([Ljava/lang/String;)V @2: invokevirtual Reason: Type 'Cat' (current frame, stack[0]) is not assignable to 'Dog' Current Frame: bci: @2 flags: { } locals: { '[Ljava/lang/String;' } stack: { 'Cat' } Bytecode: 0000000: new #2 // class Cat 0000003: dup 0000004: invokespecial #3 // Method Cat."":()V 0000007: astore_1 0000008: aload_1 0000009: invokevirtual #4 // Method Animal.speak:()V 000000c: return
结论
总之,遇到java.lang.VerifyError错误可能是由于各种原因引起的,包括字节码波动、安全计算实践中的限制,以及代码库中包含的Java组件的不一致互相依赖版本等等。在运行时,确保所有使用的库与您的系统和其他依赖库兼容是避免此问题的一种非常重要的方式。遵守这些要求将确保遵守Java的字节码规定,避免出现问题的编码实践,例如不符合安全协议或提交具有类文件不一致性的代码,这可能导致后续出现错误。每当java.lang.VerifyError出现时,必须仔细检查相关的错误消息以及您可以获取的堆栈跟踪,以确定正在发生的确切问题并采取必要的纠正措施。
Das obige ist der detaillierte Inhalt vonWarum tritt in Java der Fehler Java.lang.VerifyError auf und wie lässt sich dieses Problem lösen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Wenn bei der Verwendung Ihres Druckers eine Fehlermeldung angezeigt wird, z. B. dass der Vorgang nicht abgeschlossen werden konnte (Fehler 0x00000771), liegt dies möglicherweise daran, dass die Verbindung zum Drucker getrennt wurde. In diesem Fall können Sie das Problem mit den folgenden Methoden lösen. In diesem Artikel besprechen wir, wie Sie dieses Problem auf einem Windows 11/10-PC beheben können. Die gesamte Fehlermeldung lautet: Der Vorgang konnte nicht abgeschlossen werden (Fehler 0x0000771). Der angegebene Drucker wurde gelöscht. Beheben Sie den Druckerfehler 0x00000771 auf einem Windows-PC. Um den Druckerfehler zu beheben, konnte der Vorgang nicht abgeschlossen werden (Fehler 0x0000771). Der angegebene Drucker wurde auf einem Windows 11/10-PC gelöscht. Befolgen Sie diese Lösung: Starten Sie die Druckspule neu

Wird Windows Sandbox mit der Meldung „Windows Sandbox kann nicht gestartet werden, Fehler 0x80070005, Zugriff verweigert“ beendet? Einige Benutzer berichteten, dass Windows Sandbox nicht geöffnet werden kann. Wenn dieser Fehler auch bei Ihnen auftritt, können Sie dieser Anleitung folgen, um ihn zu beheben. Windows Sandbox startet nicht – Zugriff verweigert Wenn Windows Sandbox mit der Meldung „Windows Sandbox kann nicht gestartet werden, Fehler 0x80070005, Zugriff verweigert“ beendet wird, stellen Sie sicher, dass Sie als Administrator angemeldet sind. Diese Art von Fehler wird normalerweise durch unzureichende Berechtigungen verursacht. Versuchen Sie also, sich als Administrator anzumelden, und prüfen Sie, ob das Problem dadurch behoben wird. Wenn das Problem weiterhin besteht, können Sie die folgenden Lösungen ausprobieren: Führen Sie das WLAN als Administrator aus

Entschlüsselung des HTTP-Statuscodes 460: Warum tritt dieser Fehler auf? Einleitung: Im täglichen Netzwerkgebrauch stoßen wir häufig auf verschiedene Fehlermeldungen, einschließlich HTTP-Statuscodes. Diese Statuscodes sind ein vom HTTP-Protokoll definierter Mechanismus, der die Verarbeitung einer Anfrage anzeigt. Unter diesen Statuscodes gibt es einen relativ seltenen Fehlercode, nämlich 460. Dieser Artikel befasst sich mit diesem Fehlercode und erklärt, warum dieser Fehler auftritt. Definition des HTTP-Statuscodes 460: Zunächst müssen wir die Grundlagen des HTTP-Statuscodes verstehen

Inhaltsverzeichnis Lösung 1 Lösung 21. Löschen Sie die temporären Dateien von Windows Update 2. Reparieren Sie beschädigte Systemdateien 3. Anzeigen und Ändern von Registrierungseinträgen 4. Schalten Sie die IPv6-Netzwerkkarte aus 5. Führen Sie das WindowsUpdateTroubleshooter-Tool zur Reparatur aus 6. Schalten Sie die Firewall aus und andere verwandte Antivirensoftware. 7. Schließen Sie den WidowsUpdate-Dienst. Lösung 3 Lösung 4 „0x8024401c“-Fehler tritt während des Windows-Updates auf Huawei-Computern auf Symptom Problem Ursache Lösung Immer noch nicht gelöst? Vor kurzem musste der Webserver aufgrund von Systemschwachstellen aktualisiert werden. Nach der Anmeldung am Server wird der Fehlercode 0x8024401c angezeigt

Wenn Sie beim Erstellen oder Starten einer virtuellen Maschine mit Hyper-V auf den Fehlercode 0x80070003 stoßen, kann dies an Berechtigungsproblemen, Dateibeschädigungen oder Konfigurationsfehlern liegen. Zu den Lösungen gehören die Überprüfung von Dateiberechtigungen, die Reparatur beschädigter Dateien, die Sicherstellung der korrekten Konfiguration und mehr. Dieses Problem lässt sich lösen, indem man die verschiedenen Möglichkeiten nacheinander ausschließt. Die gesamte Fehlermeldung sieht folgendermaßen aus: Beim Erstellen von [Name der virtuellen Maschine] ist auf dem Server ein Fehler aufgetreten. Es kann keine neue virtuelle Maschine erstellt werden. Auf den Konfigurationsspeicher kann nicht zugegriffen werden: Das System kann den angegebenen Pfad nicht finden. (0x80070003). Zu den möglichen Ursachen für diesen Fehler gehören: Die Datei der virtuellen Maschine ist beschädigt. Dies kann aufgrund von Malware-, Viren- oder Adware-Angriffen passieren. Obwohl die Wahrscheinlichkeit, dass dies geschieht, gering ist, können Sie dies nicht vollständig tun

Wenn beim Spielen von Call of Duty: Vanguard der Kadena-Keesler-Fehler auftritt, kann dieser Artikel hilfreich für Sie sein. Laut Feedback einiger Spieler hat das Spiel dieses Problem auf Plattformen wie Windows PC, Xbox und PlayStation. Bei Auslösung erhalten Sie möglicherweise die folgende Fehlermeldung: Verbindung fehlgeschlagen. Keine Netzwerkverbindung fehlgeschlagen. Sie benötigen eine aktive Internetverbindung, um online oder über ein lokales Netzwerk spielen zu können. [Grund: Kadena-Keesler] Möglicherweise erhalten Sie auch die folgende Fehlermeldung: Verbindung fehlgeschlagen. Zugriff auf Onlinedienste nicht möglich. [Grund: Kadena-Keesler] Ein weiterer Fall dieses Fehlers auf Xbox ist wie folgt: Sie müssen über eine aktive Netzwerkverbindung verfügen

Titel: Analyse des Oracle-Fehlers 3114: Ursachen und Lösungen Bei der Verwendung einer Oracle-Datenbank stoßen Sie häufig auf verschiedene Fehlercodes, unter denen Fehler 3114 am häufigsten vorkommt. Bei diesem Fehler handelt es sich im Allgemeinen um Datenbankverbindungsprobleme, die beim Zugriff auf die Datenbank zu Ausnahmen führen können. In diesem Artikel wird der Oracle-Fehler 3114 interpretiert, seine Ursachen erläutert und spezifische Methoden zur Behebung des Fehlers sowie zugehörige Codebeispiele vorgestellt. 1. Definition von Fehler 3114 Oracle-Fehler 3114 bestanden

Der Anzeigefehler ist ein Problem, das in der Xiangxiang Fuzhai-App auftreten kann. Einige Benutzer sind sich nicht sicher, warum die Xiangxiang Fuzhai-App Fehler anzeigt. Dies kann an Netzwerkverbindungsproblemen, zu vielen Hintergrundprogrammen, falschen Registrierungsinformationen usw. liegen. Dies ist die Einführung des Herausgebers zur Behebung von App-Anzeigefehlern für Benutzer. Interessierte Benutzer sollten vorbeikommen und einen Blick darauf werfen! Warum zeigt die Xiangxiang Fuzhai-App eine Fehlerantwort an: Netzwerkverbindungsproblem, zu viele Hintergrundprogramme, falsche Registrierungsinformationen usw. Details: 1. [Netzwerkproblem] Lösung: Überprüfen Sie den Netzwerkstatus der Geräteverbindung, stellen Sie die Verbindung erneut her oder wählen Sie eine andere Netzwerkverbindung aus benutzen können. 2. [Zu viele Hintergrundprogramme] Lösung: Schließen Sie andere laufende Programme und geben Sie das System frei, was die Ausführung der Software beschleunigen kann. 3. [Falsche Registrierungsinformationen
