6 Java-Ausnahmen, die Java-Anfänger heimsuchen.
(Original) (Ich bin neu in Java und Englisch, daher freue ich mich über Kritik und Hilfe)
Sowohl früher als auch heute stoße ich auf viele Java-Neulinge, die ein Problem mit ein paar häufigen Ausnahmen haben, die ich noch einmal erklären muss. Ich glaube, dass andere erfahrene Java-Entwickler das gleiche Problem haben, wenn sie versuchen, Neulingen bei der Bewältigung dieser Ausnahmen zu helfen. Daher habe ich diesen Artikel für meine eigene Entwicklung geschrieben. Bitte kommentieren Sie diesen Artikel oder fügen Sie Ausnahmen zur Liste unten hinzu.
Dies ist eine dieser Ausnahmen mit einer Meldung wie
„Exception in thread „main“ NoClassDefFoundError“ , auf die die meisten neuen Java-Entwickler in der Welt der Java-Programmierung stoßen. Ein Anfänger schreibt ein Programm, das „Hallo Welt!“ anzeigt, geht zur Befehlszeile, gibt „java …“ ein, drückt die Eingabetaste und BAM! =). Und herauszufinden, wie man das Programm dazu bringt, „Hallo Welt!“ zu drucken. auf dem Monitor, dauert einige Zeit.
NoClassDefFoundError tritt auf, wenn die Java Virtual Machine (JVM) versucht, beim Start auf eine Klasse zuzugreifen und die Klasse nicht gefunden wird, obwohl dieselbe Klasse zur Kompilierungszeit gefunden wurde. Am häufigsten tritt diese Ausnahme auf, wenn versucht wird, ein Programm mit dem Befehl „Java“ auszuführen, und der Klassenpfad nicht richtig eingestellt ist. Hier finden Sie eine Beschreibung der Gründe, warum diese Ausnahme auftritt.
- Die Klasse ist im -classpath nicht verfügbar.
- Die Umgebungsvariable CLASSPATH wurde überschrieben. Das Vorhandensein und die Richtigkeit können Sie mit dem Windows-Befehl „set“ überprüfen.
Die Lösung des Problems wird hier genauer beschrieben
.
Darüber hinaus müssen Sie den Unterschied zwischen der Umgebungsvariablen CLASSPATH und dem Interpreterschlüssel -classpath verstehen. Fachleute raten von der Verwendung von CLASSPATH ab. Der beste Weg besteht darin, den Schlüssel -classpath an den Interpreter zu übergeben.
ClassNotFoundException ist eine weitere Ausnahme, die für einen Neuling zum Albtraum wird, sobald er mit dem Programmieren beginnt.
Interessanterweise verwechselt der durchschnittliche Java-Entwickler häufig die Ausnahmen „ClassNotFoundException“ und „NoClassDefFoundError“ . Und so bleibt der Unterschied zwischen diesen beiden Ausnahmen
eine der am häufigsten gestellten Fragen in Vorstellungsgesprächen für die Junior-Stelle .
ClassNotFoundException tritt auf, wenn die JVM versucht, eine bestimmte Klasse zu laden und diese nicht im Klassenpfad findet. Einer der häufigsten Orte, an denen ein neuer Java-Entwickler zum ersten Mal darauf stößt, ist die Verbindung zu einer Datenbank mithilfe der JDBC-Bibliothek. Dort werden wir versuchen, den Treiber mit Code wie Class.forName("JDBCdriver") zu laden. Ein guter Artikel über ClassNotFoundException ist
hier .
Der Versuch, das Konzept der Java-Klassenlader zu verstehen , ist die effektivste Methode, um dieses Problem zu lösen. Sie können lesen,
wie Sie den Java-Klassenpfad in einer Win/Unix-Umgebung konfigurieren .
Wie in den Java-Dokumenten angegeben , tritt in den folgenden Fällen eine Ausnahme auf:
- Sie versuchen, eine Klasse mit der Methode „Class.forName“ zu laden, und die .class-Datei befindet sich nicht im Klassenpfad. Dies ist das häufigste der drei hier aufgeführten Szenarios.
- Wenn der Klassenlader versucht, eine Klasse mithilfe der LoadClass zu laden.
- Wenn der Klassenlader versucht, eine Klasse mit findSystemClass zu laden.
Diese Ausnahme ist für Anfänger leichter zu verstehen als die ersten beiden. Darüber hinaus
ist diese Ausnahme leicht zu identifizieren, weil Wenn die Ausnahme auftritt, gibt die Meldung über die Ausnahme
die Zeilennummer im Programm an, in der sie aufgetreten ist. Diese Ausnahme tritt auf, wenn die JVM versucht, auf ein Objekt zuzugreifen oder eine Methode für ein Objekt aufzurufen und eine Null anstelle einer Referenz auf das Objekt erhält. Das Java-Dokument nennt außerdem folgende Gründe:
- Auf eine Methode für ein Objekt zugreifen oder diese ändern, die ungültig ist. (d. h. anstelle eines Verweises auf ein JVM-Objekt erhält es null)
- Ermitteln der Länge eines Arrays, wenn es ungültig ist. (zum Beispiel nicht initialisiert)
- Es wurde versucht, auf ein nicht vorhandenes Array-Element vom Typ Object zuzugreifen. (d. h. wenn das Array-Element anstelle einer Objektreferenz Null enthält)
Die einfachste Methode, diese Ausnahme zu vermeiden, ist die Verwendung einer Nicht-NULL-Prüfung. Früher oder später wird dies jedoch zu einer Java-Entwicklungspraxis und Sie werden überall Nicht-NULL-Prüfungen finden. Interessanterweise
gilt das Einfügen von Nicht-NULL-Prüfungen überall nicht als guter Programmierstil . Und der Hauptgrund für die Verwendung einer Nicht-NULL-Prüfung besteht darin, dass der Entwickler im Fehlerfall ein Nullobjekt übergeben möchte. Stattdessen ist es
eine gute Programmierpraxis , dass Programmierer
ein leeres Objekt anstelle eines Nullwerts als grundlegende Logik dafür zurückgeben sollten , wie sich ein Programm im Fehlerfall verhält. Die Übernahme dieser Programmierpraxis ist jedoch schwieriger als es scheint.
Auf unserer Ressource gibt es einen guten Artikel dazu .
Dies ist eine weitere Ausnahme, die Anfängern bekannt ist und die auftritt, wenn versucht wird, ein Objekt in eine Klasse umzuwandeln, die keine Unterklasse davon ist. Auch dies ist relativ leicht zu verstehen, zu identifizieren und einfach zu beheben. Eine Möglichkeit, diese Ausnahme zu vermeiden, wenn der Typ des Objekts zur Laufzeit unbekannt ist, besteht darin, mithilfe von
„InstanceOf“ zu überprüfen, ob das Objekt eine Instanz einer bestimmten Klasse ist.
Diese Ausnahme ist selbsterklärend und tritt auf, wenn die JVM versucht, auf ein Array-Element mit einem nicht vorhandenen Index zuzugreifen, z. B. negativ (-1) oder größer oder gleich der Größe des Arrays.
Es ist ganz einfach zu verstehen, zu definieren und zu korrigieren . Beim Erstellen einer Schleife tritt beispielsweise
for (i = 0; i <= cmd_stack.length; i++) System.out.println(cmd_stack[i]);
eine Ausnahme auf, da die Indizes im Array bei 0 beginnen und die Längenmethode die Anzahl der Elemente zurückgibt und die Zahl um 1 größer als der Wert des letzten Index ist. Richtige Verwendung
for (i = 0; i < cmd_stack.length; i++) System.out.println(cmd_stack[i]);
Diese Ausnahme kommt seltener vor und ist relativ leicht zu verstehen, zu identifizieren und zu beheben. Es tritt auf, wenn die JVM versucht, eine nicht vorhandene Methode oder eine Methode mit einem ungültigen Argument aufzurufen.
GO TO FULL VERSION