JavaRush /Java-Blog /Random-DE /Kaffeepause Nr. 220. So beheben Sie Ausnahmen in Java – e...

Kaffeepause Nr. 220. So beheben Sie Ausnahmen in Java – eine detaillierte Anleitung

Veröffentlicht in der Gruppe Random-DE
Quelle: JavaTechOnline In diesem Tutorial erfahren Sie, wie Sie häufige Ausnahmen in Java beheben. Zusätzlich zur Theorie sehen Sie Codebeispiele zur Behebung solcher Probleme. Kaffeepause Nr. 220.  So beheben Sie Ausnahmen in Java – Eine detaillierte Anleitung – 1Wie bei anderen Programmiersprachen können Java-Entwickler beim Schreiben von Code auf Fehler oder Ausnahmen stoßen. Ausnahmen sollten ernst genommen werden, da ihr Auftreten Arbeitszeit in Anspruch nimmt. Mit ein wenig Wissen können Sie die Lösung der meisten dieser Probleme jedoch beschleunigen. Lassen Sie uns also lernen, wie Sie häufige Ausnahmen in Java beheben.

Allgemeine Richtlinien zur Vermeidung von Ausnahmen in Java

Um das Auslösen von Ausnahmen in Java zu vermeiden, ist es wichtig, die Codierungsrichtlinien zu verstehen und zu befolgen:
  1. Überprüfen Sie Benutzereingaben immer, bevor Sie sie in Ihrem Code verwenden.
  2. Verwenden Sie try-catch , throws , throw Blocks , je nachdem, was für ein bestimmtes Szenario geeignet ist.
  3. Vernachlässigen Sie nicht die Meldungen im Code über Verarbeitung und Fehler. Dies wird dazu beitragen, Probleme zu erkennen und zu beheben.
  4. Achten Sie darauf, Ausnahmen zu Debugging-Zwecken zu protokollieren. Mithilfe von Logger-Meldungen können Sie Probleme identifizieren.
  5. Befolgen Sie die Best Practices für die Codierung, um Ausnahmen zu vermeiden, und testen Sie Ihren Code gründlich.
  6. Aktualisieren Sie Ihre API-Abhängigkeiten, um sicherzustellen, dass Sie die neuesten und stabilsten Versionen von Bibliotheken und Frameworks verwenden.
  7. Verwenden Sie die erforderlichen Tools und Test-Frameworks, um potenzielle Probleme in Ihrem Code zu identifizieren, bevor sie Ausnahmen auslösen.
  8. Überwachen Sie die Leistung und Protokolle Ihrer Anwendung, um Probleme schnell zu erkennen und zu beheben.
  9. Bleiben Sie mit bewährten Sicherheitspraktiken auf dem Laufenden, um sicherzustellen, dass Ihr Code sicher und vor potenziellen Angriffen geschützt ist.
  10. Dokumentieren Sie Ihren Code und seine Ausnahmen sorgfältig, damit andere Entwickler ihn leichter verstehen und verwalten können.

Liste der häufigsten Ausnahmen in Java

Java hat eine ziemlich lange Liste von Ausnahmen. Schauen wir uns einige der häufigsten an:

NullPointerException

NullPointerException ist eine Art RuntimeException- Ausnahme . Es tritt auf, wenn wir versuchen, eine Referenzvariable zu verwenden, die einen Nullwert hat. Dies bedeutet, dass es auf ein Objekt oder eine Variable zeigt, deren Wert null ist . Ein solcher Fehler kann auftreten, wenn wir versuchen, eine Methode aufzurufen oder auf ein Feld eines Objekts zuzugreifen, das nicht initialisiert wurde, oder wenn wir null als Parameter an eine Methode übergeben, die es nicht verarbeitet. Um zu verhindern, dass eine NullPointerException ausgelöst wird, können Sie mit dem ==- Operator prüfen, ob eine Referenzvariable null ist . Wenn dies der Fall ist, muss der Nullfall korrekt behandelt werden. Alternativ können wir unsere Variablen (wo möglich) auf Standardwerte initialisieren, um sicherzustellen, dass wir niemals auf eine Nullreferenz stoßen. Eine andere Möglichkeit, eine NullPointerException zu vermeiden , ist die Verwendung der Optional- Klasse . In Java ist ein Optional ein Containerobjekt, das einen Wert ungleich Null enthalten kann oder nicht. Es wird verwendet, um das Vorhandensein oder Fehlen eines Werts darzustellen, ähnlich wie der Nullwert verwendet wird, um das Fehlen eines Werts darzustellen. Wenn ein Programmierer versucht, auf den leeren Wert eines optionalen Objekts zuzugreifen , löst das Programm keine NullPointerException aus , sondern gibt stattdessen ein leeres optionales Objekt zurück . Mit anderen Worten, Optional zwingt den Programmierer dazu, den Fall zu behandeln, in dem der Wert fehlt, was dazu beiträgt, eine NullPointerException zu vermeiden .

IndexOutOfBoundsException

IndexOutOfBoundsException ist eine Laufzeitausnahme, die ausgelöst wird, wenn der Index, der für den Zugriff auf ein Array oder eine Sammlung verwendet wird, negativ oder größer oder gleich der Größe des Arrays oder der Sammlung ist. Um das Auftreten dieser Ausnahme zu verhindern, müssen wir sicherstellen, dass der Index, der für den Zugriff auf das Array oder die Sammlung verwendet wird, innerhalb seiner Grenzen liegt, d. h. er muss größer oder gleich Null und kleiner als die Größe des Arrays oder der Sammlung sein.

ArrayIndexOutOfBoundsException

ArrayIndexOutOfBoundsException ist ein Typ von IndexOutOfBoundsException , der ausgelöst wird, wenn versucht wird, auf ein Array mit einem ungültigen Index zuzugreifen. In Java beginnen Array-Indizes bei 0 und enden bei length()-1 , wobei length() die Anzahl der Elemente im Array ist. Wenn Sie versuchen, auf ein Element an einem Index außerhalb dieses Bereichs zuzugreifen, löst Java eine ArrayIndexOutOfBoundsException aus . Wenn Sie auf eine ArrayIndexOutOfBoundsException stoßen , sollten Sie Ihren Code überprüfen, um sicherzustellen, dass Sie beim Zugriff auf die Elemente im Array die richtigen Indizes verwenden.

StringIndexOutOfBoundsException

StringIndexOutOfBoundsException ist ein IndexOutOfBoundsException- Typ , der ausgelöst wird, wenn versucht wird, auf ein Zeichen in einer Zeichenfolge zuzugreifen, die einen ungültigen Index hat. Denken Sie wie bei der vorherigen ArrayIndexOutOfBoundsException daran, dass in Java der Index einer Zeichenfolge bei 0 beginnt und bei length()-1 endet , wobei length() die Anzahl der Zeichen in der Zeichenfolge ist. Wenn Sie versuchen, auf ein Zeichen mit einem Index außerhalb dieses Bereichs zuzugreifen, kann es zu einer StringIndexOutOfBoundsException kommen . Wenn Sie auf eine StringIndexOutOfBoundsException stoßen , sollten Sie Ihren Code überprüfen, um sicherzustellen, dass Sie beim Zugriff auf Zeichen in der Zeichenfolge die richtigen Indizes verwenden.

ClassCastException

Diese Ausnahme tritt auf, wenn wir versuchen, ein Objekt in einen Typ umzuwandeln, der mit seinem tatsächlichen Typ nicht kompatibel ist. Um ein Problem wie dieses zu lösen, ist es wichtig sicherzustellen, dass Ihr Java-Programm nur versucht, Objekte in die Klassen umzuwandeln, von denen sie Instanzen sind. Sie können den Typ eines Objekts mit dem Operator „instanceof“ überprüfen , bevor Sie die Umwandlung anwenden.

IllegalArgumentException

IllegalArgumentException ist ein RuntimeException- Typ , der ausgelöst wird, wenn eine Methode mit einem illegalen oder unangemessenen Argument aufgerufen wird. Mit anderen Worten: Dieser Fehler kann auftreten, wenn eine Methode mit einem Argument aufgerufen wird, das außerhalb des erwarteten Bereichs liegt oder nicht das erwartete Format oder die erwartete Struktur aufweist. Beispielsweise erfordert eine Methode eine positive Zahl als Argument und wir geben eine negative Zahl an, was eine ungültige Eingabe darstellt. Wenn Sie auf eine IllegalArgumentException stoßen , sollten Sie Ihren Code überprüfen, um sicherzustellen, dass Sie Methoden mit gültigen und geeigneten Argumenten aufrufen.

Illegale staatliche Ausnahme

IllegalStateException ist ein RuntimeException -Typ , der ausgelöst wird, wenn sich ein Objekt in einem für die ausgeführte Operation ungeeigneten Zustand befindet. Dies kann passieren, wenn eine Methode für ein Objekt aufgerufen wird, das sich nicht im erwarteten Zustand befindet. Wenn wir beispielsweise ein Datenbankverbindungsobjekt erstellen und es dann schließen. Wenn wir dann versuchen, ein Statement- Objekt in einer geschlossenen Verbindung zu erstellen , wird eine IllegalStateException ausgelöst , da die Methode createStatement() eine offene Verbindung erfordert. Wenn Sie auf eine IllegalStateException stoßen , sollten Sie Ihren Code überprüfen, um sicherzustellen, dass Sie Methoden für Objekte aufrufen, die sich im entsprechenden Zustand befinden.

UnsupportedOperationException

UnsupportedOperationException ist ein RuntimeException- Typ , der ausgelöst wird, wenn versucht wird, einen nicht unterstützten Vorgang für ein Objekt auszuführen. Dieser Fehler kann auftreten, wenn wir eine Methode aufrufen, die vom Objekt nicht implementiert ist oder vom Objekt nicht unterstützt wird. Um zu verhindern, dass eine Ausnahme ausgelöst wird, sollten wir solche Operationen nicht aufrufen, die für Objekte nicht unterstützt werden. Wir müssen unseren Code überprüfen, um sicherzustellen, dass wir Methoden für Objekte aufrufen, die den Vorgang unterstützen.

ArithmeticException

ArithmeticException ist ein RuntimeException- Typ , der ausgelöst wird, wenn eine arithmetische Operation ein ungültiges Ergebnis liefert. Diese Ausnahme kann auftreten, wenn wir versuchen, eine arithmetische Operation mit einem ungültigen oder ungültigen Argument auszuführen. Zum Beispiel beim Versuch, durch Null zu dividieren. Um dieses Problem zu lösen, können wir eine Eingabevalidierung durchführen und sicherstellen, dass die Argumente die erforderlichen Bedingungen erfüllen, bevor wir die arithmetische Operation ausführen.

Sicherheitsaußnahme

SecurityException ist eine Art RuntimeException , die ausgelöst wird, wenn während der Programmausführung eine Sicherheitsverletzung auftritt. Dieser Fehler kann auftreten, wenn ein Programm versucht, einen Vorgang auszuführen, der gemäß der Sicherheitsrichtlinie nicht zulässig ist. Um das Problem zu lösen, müssen wir sicherstellen, dass wir Zugriff auf Ressourcen haben und Vorgänge ausführen, für die wir eine spezielle Genehmigung haben.

NumberFormatException

NumberFormatException ist ein RuntimeException -Typ , der ausgelöst wird, wenn eine Methode zum Konvertieren einer Zeichenfolge in ein Zahlenformat aufgerufen wird, die Zeichenfolge jedoch nicht das entsprechende Format aufweist. Um dieses Problem zu lösen, müssen wir zunächst die Benutzereingaben validieren, bevor wir versuchen, sie zu konvertieren. Überprüfen Sie außerdem Ihren Code, um sicherzustellen, dass Sie versuchen, Zeichenfolgen zu konvertieren, die für den numerischen Zieltyp entsprechend formatiert sind.

InterruptedException

InterruptedException ist eine geprüfte Ausnahme, die ausgelöst wird, wenn ein Thread auf ein Ereignis wartet, schläft oder blockiert und dieses Ereignis von einem anderen Thread unterbrochen wird. Der Fehler kann auftreten, wenn ein Thread auf eine Eingabe wartet, eine Sperre aufhebt oder einen anderen Vorgang abschließt und ein anderer Thread den wartenden Thread unterbricht. Um dieses Problem zu beheben, können Sie InterruptedException abfangen und darauf reagieren, indem Sie Ressourcen bereinigen, den Thread stoppen oder andere geeignete Maßnahmen ergreifen. Wenn Sie auf eine InterruptedException stoßen , sollten Sie Ihren Code überprüfen, um sicherzustellen, dass Sie Thread-Unterbrechungen korrekt behandeln.

FileNotFoundException

FileNotFoundException ist eine geprüfte Ausnahme, die ausgelöst wird, wenn ein Programm versucht, auf eine Datei zuzugreifen, die nicht existiert oder am angegebenen Speicherort nicht gefunden werden kann. Es kann auftreten, wenn eine Datei falsch geschrieben, verschoben oder gelöscht wird oder wenn ein Programm nicht über die erforderlichen Berechtigungen zum Zugriff auf die Datei verfügt. Um den Fehler zu beheben, können Sie eine Eingabevalidierung durchführen, um sicherzustellen, dass der Dateipfad korrekt ist und das Programm über die erforderlichen Berechtigungen zum Zugriff auf die Datei verfügt.

IOException

IOException ist eine geprüfte Ausnahme in Java, die einen Fehler darstellt, der beim Ausführen von Eingabe- oder Ausgabevorgängen, wie etwa dem Lesen oder Schreiben in eine Datei oder einen Netzwerk-Socket, aufgetreten ist. Dies kann verschiedene Gründe haben, z. B. weil die angegebene Datei fehlt oder nicht zugänglich ist, ein Netzwerkfehler oder unzureichende Berechtigungen vorliegen. Um das Problem zu beheben, müssen Sie mehrere Aktionen ausführen, z. B. die Fehlermeldung überprüfen, die Ausnahme mithilfe von try-catch behandeln , Ressourcen schließen, Dateiberechtigungen überprüfen usw.

NoSuchMethodException

NoSuchMethodException ist eine Ausnahme, die zur Laufzeit ausgelöst wird, wenn wir versuchen, eine Methode aufzurufen, die in der Klasse nicht vorhanden ist. Diese Ausnahme tritt normalerweise auf, wenn wir eine Methode mit Class.getMethod() oder Class.getDeclaredMethod() aufrufen und der angegebene Methodenname nicht in der Klasse oder Schnittstelle gefunden wird. Eine Ausnahme kann auch auftreten, wenn wir versuchen, eine Methode mithilfe der Klasse java.lang.reflect.Method aufzurufen und der angegebene Methodenname im Objekt nicht vorhanden ist. Um diese Ausnahme zu vermeiden, stellen Sie sicher, dass Sie eine gültige Methode mit der richtigen Methodensignatur und dem richtigen Zugriffsspezifizierer aufrufen.

NoSuchFieldException

NoSuchFieldException ist eine Laufzeitausnahme, die auftritt, wenn wir versuchen, auf ein Feld zuzugreifen, das nicht in der Klasse enthalten ist. Diese Ausnahme tritt normalerweise auf, wenn wir eine Methode mit Class.getField() oder Class.getDeclaredField() aufrufen und der angegebene Feldname nicht in der Klasse oder Schnittstelle gefunden wird. Darüber hinaus kann es auch aufgerufen werden, wenn wir versuchen, mit der Klasse java.lang.reflect.Field auf ein Feld zuzugreifen und der angegebene Feldname im Objekt nicht vorhanden ist. Um diese Ausnahme zu vermeiden, stellen Sie sicher, dass Sie auf ein gültiges Feld mit dem richtigen Namen und den richtigen Zugriffsmodifikatoren zugreifen. Wenn Sie auf ein privates Feld zugreifen, verwenden Sie unbedingt die Methode getDeclaredField() anstelle der Methode getField() .

IllegalAccessException

IllegalAccessException ist eine Laufzeitausnahme, die auftritt, wenn wir versuchen, auf ein Feld oder eine Methode in einer Klasse zuzugreifen, aber nicht über die erforderlichen Zugriffsrechte verfügen. Diese Ausnahme tritt normalerweise auf, wenn wir versuchen, von außerhalb einer Klasse auf ein privates Feld oder eine private Methode zuzugreifen, oder wenn wir versuchen, von einer Klasse aus auf ein geschütztes Feld oder eine geschützte Methode zuzugreifen, die keine Unterklasse der ursprünglichen Klasse ist. Es kann auch aufgerufen werden, wenn versucht wird, auf ein Feld oder eine Methode zuzugreifen, die von der Klasse java.lang.reflect.AccessibleObject als nicht verfügbar markiert wurde . Um dieses Problem zu vermeiden, stellen Sie sicher, dass Sie über die erforderlichen Berechtigungen für das Feld oder die Methode verfügen, auf die Sie zugreifen möchten. Wenn das Feld oder die Methode privat ist, müssen Sie möglicherweise Reflection verwenden und AccessibleObject auf true setzen (um darauf zuzugreifen). Seien Sie jedoch vorsichtig, wenn Sie Reflektion verwenden, um auf private Felder oder Methoden zuzugreifen, da dies die Kapselung zerstören und die Integrität der Klasse gefährden kann.

VerifyError

VerifyError ist ein Laufzeitfehler, der eine Unterklasse von LinkageError ist . Es tritt auf, wenn die Java Virtual Machine (JVM) auf eine Klassendatei stößt, die gegen bestimmte Validierungsregeln verstößt. Beim Kompilieren einer Java-Klasse prüft der Compiler, ob der Bytecode bestimmte Regeln und Einschränkungen einhält, wie z. B. Typsicherheit und ordnungsgemäße Verwendung des Stapels und lokaler Variablen. Wenn eine Klassendatei gegen diese Regeln verstößt, löst die JVM beim Laden und Überprüfen der Klasse zur Laufzeit einen VerifyError aus . Um VerifyError zu vermeiden , stellen Sie sicher, dass Ihr Code der korrekten Syntax und Semantik der Java-Sprache folgt. Wenn Sie auf einen VerifyError stoßen , sollten Sie Ihren Code überprüfen, um sicherzustellen, dass er gültig ist und keine Verstöße gegen die Java-Bytecode-Überprüfungsregeln vorliegen.

Außerhalb des Speicherfehler

OutOfMemoryError ist eine Unterklasse von Error , einem Throwable- Typ , der schwerwiegende Probleme verursacht, die zur Laufzeit nicht gelöst werden können. Obwohl Java 8 einige Verbesserungen bei der Speicherbereinigung und Speicherverwaltung enthält, kann es dennoch zu einem OutOfMemoryError kommen , wenn Ihre Anwendung zu viel Speicher verwendet oder die Speichernutzung falsch verwaltet. Um OutOfMemoryError zu vermeiden , müssen Sie die Speichernutzung in Ihrer Java-Anwendung ordnungsgemäß verwalten. Dazu gehört die Verwendung von Datenstrukturen und Algorithmen, die den Speicher effizient nutzen, die Vermeidung unnötiger Objekterstellung und das ordnungsgemäße Löschen von Objekten, wenn sie nicht mehr benötigt werden. Darüber hinaus können Sie die maximale Heap-Größe für die JVM erhöhen, indem Sie beim Ausführen Ihres Java-Programms das Flag -Xmx verwenden .

StackOverflowError

StackOverflowError ist ein Fehlertyp, der auftritt, wenn die von einem Programm benötigte Stapelgröße die ihm zugewiesene Speichermenge überschreitet. Dies kann auftreten, wenn ein Programm zu viele verschachtelte Methoden aufruft oder wenn eine Methode sich selbst zu oft rekursiv aufruft, was zu einer Endlosschleife führt. Die Java Virtual Machine (JVM) weist dem Ausführungsstapel eine feste Speichermenge zu, die zur Verfolgung von Methodenaufrufen und lokalen Variablen verwendet wird. Wenn der Stapel überläuft, löst die JVM einen StackOverflowError aus . Um StackOverflowError zu vermeiden , ist es wichtig sicherzustellen, dass Ihr Java-Programm Rekursion und Methodenaufrufe angemessen nutzt. Wenn ein StackOverflowError auftritt , können Sie versuchen, die Stapelgröße zu erhöhen, indem Sie beim Ausführen Ihres Java-Programms das Flag -Xss verwenden .

InvocationTargetException

InvocationTargetException ist eine geprüfte Ausnahme, die vom Java-Reflexionsmechanismus ausgelöst wird. Es ist Teil des java.lang.reflect.InvocationTargetException -Pakets und wird verwendet, um anzuzeigen, dass während eines Methoden- oder Konstruktoraufrufs eine Ausnahme aufgetreten ist. Wenn eine Methode oder ein Konstruktor mithilfe des Java-Reflexionsmechanismus aufgerufen wird, wird die invoke()- Methode der Klasse java.lang.reflect.Method oder java.lang.reflect.Constructor aufgerufen . Wenn die aufgerufene Methode oder der aufgerufene Konstruktor eine Ausnahme auslöst, fängt die invoke()- Methode diese ab und verpackt sie in eine InvocationTargetException . Diese Ausnahme wird dann an den Aufrufer der invoke()- Methode übergeben . Um die InvocationTargetException zu beheben , müssen wir sie abfangen, die Grundausnahme mit der Methode getCause() abrufen und die Grundausnahme entsprechend behandeln. Beachten Sie, dass die Ursache eine geprüfte Ausnahme oder eine Laufzeitausnahme sein kann. Stellen Sie daher sicher, dass Sie diese ordnungsgemäß behandeln.

Möglichkeiten zur Behebung der häufigsten Ausnahmen in Java

So beheben Sie die NullPointerException

Szenario: Sie verfügen über eine Methode, die auf ein Objekt mit dem Wert null zugreift .
String title= null;
System.out.println(title.length()); // Это вызовет NullPointerException
Lösung Nr. 1: Überprüfen Sie vor der Verwendung, ob das Objekt null ist.
if(title!= null) {
   System.out.println(title.length());
} else {
   System.out.println("title is null");
}
Lösung Nr. 2: Verwenden Sie Optional, um NullPointerException zu vermeiden .
Optional<String> optionalTitle = Optional.ofNullable(getTitle());
if (optionalTitle.isPresent()) {
   String title= optionalTitle.get();
   System.out.println("Title: " + title);
} else {
   System.out.println("Title is not available.");
}

So beheben Sie die ArrayIndexOutOfBoundsException

Szenario: Sie versuchen, auf ein Array mit einem Index zuzugreifen, der außerhalb seiner Grenzen liegt.
int[] numbers = {4, 5, 6};
System.out.println(numbers[3]);   // Это вызовет ArrayIndexOutOfBoundsException
Lösung: Überprüfen Sie die Länge des Arrays, bevor Sie darauf zugreifen, und stellen Sie sicher, dass Sie gültige Indizes verwenden.
int[] numbers = {4, 5, 6};
if (numbers.length > 3) {
   System.out.println(numbers[3]);
} else {
   System.out.println("ArrayIndexOutOfBoundsException: Please use valid indexes of the Array");
}

So beheben Sie ClassCastException

Szenario: Sie versuchen, ein Objekt in einen Typ umzuwandeln, der mit seinem tatsächlichen Typ nicht kompatibel ist.
Object obj = "Java Exception";
Integer number = (Integer) obj; // Это вызовет ClassCastException
Lösung: Stellen Sie sicher, dass Sie Objekte nur in Typen umwandeln, mit denen sie kompatibel sind.
Object obj = "Java Exception";
if(obj instanceof Integer) {
   Integer number = (Integer) obj;
   System.out.println(number);
} else {
   System.out.println("Object cannot caste to Integer");
}

So beheben Sie die IllegalArgumentException

Szenario: Sie haben ein ungültiges Argument an eine Methode übergeben.
public void printNumber(int number) {
   if(number <= 0) {
      throw new IllegalArgumentException("You cannot pass a negative number or zero");
   }
   System.out.println(number);
}

printNumber(-1); // Это вызовет IllegalArgumentException
Lösung: Stellen Sie sicher, dass Sie gültige Argumente an Methoden übergeben. Übergeben Sie in diesem Fall eine positive Zahl.
printNumber(1); //  Это успешно напечатает 1.

So beheben Sie IllegalStateException

Szenario: Das Objekt befindet sich in einem ungültigen Zustand.
public class Bike {

   private Boolean isStarted;

   public void start() {
      if(isStarted) {
        throw new IllegalStateException("Bike is already started");
      }
      isStarted = true;
      System.out.println("Bike started");
   }
}

Bike bike= new Bike();
bike.start();
bike.start(); // Это вызовет IllegalStateException потому что bike is already started
Lösung: Stellen Sie sicher, dass Sie den Objektstatus korrekt beibehalten.
Bike bike= new Bike();
bike.start();

So beheben Sie UnsupportedOperationException

Szenario: Sie verwenden eine Operation, die von einem Objekt nicht unterstützt wird. Ein beliebtes Beispiel ist, dass Sie wahrscheinlich eine UnsupportedOperationException- Ausnahme sehen, wenn Sie die Operation „remove()“ für eine unveränderliche Sammlung verwenden .
List<String> list = Arrays.asList("Java", "Angular", "Spring");
list.add("Python"); // Это вызовет UnsupportedOperationException
Da die Methode Arrays.asList() eine unveränderliche Liste zurückgibt, unterstützt sie das Hinzufügen oder Entfernen von Elementen nicht. Lösung: Stellen Sie sicher, dass Sie nur unterstützte Vorgänge für Objekte aufrufen.
List<String> list = new ArrayList<>(Arrays.asList("Java", "Angular" "Spring"));
list.add("Python");
System.out.println(list);

So beheben Sie ArithmeticException

Szenario Nr. 1: Sie versuchen, eine ganzzahlige Division durchzuführen, die ein Bruchergebnis liefert.
int i = 10;
int j = 4;
int k = i/j; // Это вызовет исключение ArithmeticException: целочисленное деление будет дробным
Hier ist das Ergebnis der Division 2,5, was einem Bruchwert entspricht. Da ganze Zahlen keine Bruchwerte speichern können, wird eine ArithmeticException ausgelöst . Lösung: Um diese Ausnahme zu vermeiden, können wir einen Datentyp verwenden, der Bruchwerte unterstützt, z. B. double , um das Ergebnis der Divisionsoperation zu speichern. Hier ist ein Beispiel:
int i = 10;
int j = 4;
double k = (double) i/j;
Szenario Nr. 2: Sie versuchen, durch Null zu dividieren und erhalten diese Ausnahme. Dies ist das häufigste Szenario.
int i = 4;
int j = 0;
int k = i/j; // Это вызовет исключение ArithmeticException: нельзя делить на ноль
Lösung: Division durch Null richtig handhaben. Der folgende Code demonstriert beispielsweise die korrekte Verarbeitung.
int i = 4;
int j = 0;
if(j != 0) {
int k = i/j;
System.out.println(k);
} else {
System.out.println("ArithmeticException: Cannot divide by zero");
}

So beheben Sie die IndexOutOfBoundsException

Szenario: Sie versuchen, auf eine Sammlung zuzugreifen, deren Index sich außerhalb der Sammlung befindet.
List<String> list = Arrays.asList("Apple", "Papaya", "Mango");
System.out.println(list.get(3)); // Это вызовет IndexOutOfBoundsException
Lösung: Überprüfen Sie die Größe der Sammlung, bevor Sie darauf zugreifen, und stellen Sie sicher, dass Sie gültige Indizes verwenden.
List<String> list = Arrays.asList("Apple", "Papaya", "Mango");
if (list.size() > 3) {
   System.out.println(list.get(3));
} else {
   System.out.println("You are using the Index which is out of bounds");
}

So beheben Sie eine IOException

Szenario: Ein Eingabe-/Ausgabevorgang schlägt fehl, weil auf die Datei nicht zugegriffen werden kann.
try {
   File inputFile = new FileReader("pqr.txt");
   BufferedReader reader = new BufferedReader(inputFile);
   String line = reader.readLine();
   System.out.println(line);
} catch (IOException e) {
   e.printStackTrace();
}
Lösung: Behandeln Sie E/A-Fehler und stellen Sie sicher, dass Ressourcen korrekt geschlossen werden.
File inputFile = new File("pqr.txt");

if (!inputFile.exists() || !inputFile.canRead()) {
 System.out.println("The input file is missing or not readable.");
 return;
}

try {
BufferedReader reader = new BufferedReader(inputFile);
 String line = reader.readLine();
 System.out.println(line);
  reader.close();
} catch (IOException e) {
 e.printStackTrace();
}
Beachten Sie, dass wir alternativ die in Java 7 eingeführte Try-with-Ressource- Funktion verwenden können , um Ressourcen automatisch zu schließen, wie unten gezeigt. Wir können eine oder mehrere Ressourcen in einer Try- Anweisung deklarieren , und Java schließt die Ressourcen automatisch am Ende des Blocks, unabhängig davon, ob der Block normal abgeschlossen wird oder eine Ausnahme ausgelöst wird.
try (BufferedReader reader = new BufferedReader(new FileReader("pqr.txt"))) {
....
} catch {
....
}

So beheben Sie FileNotFoundException

Szenario: Die Datei wurde am angegebenen Speicherort nicht gefunden.
try {
     BufferedReader reader = new BufferedReader(new FileReader("abc.txt"));
     String line = reader.readLine();
     System.out.println(line);
     reader.close();
} catch (FileNotFoundException | IOException e) {
     System.out.println("An error has occurred while reading the file: " + e.getMessage());
}
Lösung: Stellen Sie sicher, dass die Datei vorhanden ist und Sie über die entsprechenden Zugriffsberechtigungen verfügen.
try {
    File file = new File("abc.txt");
    if(!file.exists()) {
    throw new FileNotFoundException("File not found at the specified location");
    }
    BufferedReader reader = new BufferedReader(new FileReader(file));
    String line = reader.readLine();
    System.out.println(line);
    reader.close();
} catch (IOException e) {
    e.printStackTrace();
}

So beheben Sie NoSuchMethodException

Szenario: Wenn Sie versuchen, auf eine Methode zuzugreifen, die nicht gefunden werden kann.
public class TestClass {
   public void sayHello() {
      System.out.println("Hello");
   }
}

TestClass obj = new TestClass();
Method method = obj.getClass().getMethod("printHello"); // Это вызовет NoSuchMethodException
Lösung: Stellen Sie sicher, dass die Methode vorhanden ist und dass der Methodenname und die Signatur korrekt sind.
public class TestClass {
   public void sayHello() {
      System.out.println("Hello");
   }
}

TestClass  obj = new TestClass();
try {
    Method method = obj.getClass().getMethod("sayHello");
} catch (NoSuchMethodException e) {
    e.printStackTrace();
}

So beheben Sie ConcurrentModificationException

Szenario: Eine Sammlung ändert sich während der Iteration.
List<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
for (String str : list) {
  list.remove(str);  // Это вызовет ConcurrentModificationException
}
Lösung: Verwenden Sie einen Iterator, um eine Sammlung zu durchlaufen und sie mithilfe von Iteratormethoden zu ändern.
List<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
    String str = iterator.next();
    iterator.remove();
}
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION