Mechanismus zur Behandlung von Java-Ausnahmen

abnormal

1. Was ist eine Ausnahme?

Fehler in Java können grob in zwei Kategorien unterteilt werden:

Ein Typ sind Fehler zur Kompilierungszeit , die sich im Allgemeinen auf Syntaxfehler beziehen, die im Allgemeinen vermeidbar sind.

Der andere Typ sind Laufzeitfehler .

Es gibt eine Reihe von Ausnahmen, die speziell zur Beschreibung verschiedener Laufzeitausnahmen in Java verwendet werden . Diese werden als Ausnahmeklassen bezeichnet . Java bietet in Kombination mit Ausnahmeklassen einen Mechanismus zur Behandlung von Fehlern.

Die spezifischen Schritte sind:
Wenn ein Fehler im Programm auftritt, wird ein instanziiertes Objekt der Ausnahmeklasse erstellt, das die Fehlerinformationen enthält, und das Objekt wird automatisch an das System gesendet, und das System überträgt es an den Code, der die Ausnahme behandeln kann zum Bearbeiten.

Ausnahmen können in zwei Kategorien unterteilt werden: Fehler und Ausnahme.

Fehler bezieht sich auf einen Systemfehler, der von der JVM generiert wurde, und das von uns geschriebene Programm kann ihn nicht verarbeiten.

Ausnahme bezieht sich auf einen Fehler, der während der Ausführung des Programms auftritt, und das Programm, das wir schreiben, kann damit umgehen.

2. Abnormale Verwendung

Die Verwendung von Ausnahmen erfordert die Verwendung von zwei Schlüsselwörtern try and catch , und diese beiden Schlüsselwörter müssen in Kombination verwendet werden. Verwenden Sie try, um den Code zu überwachen, der eine Ausnahme auslösen kann. Sobald die Ausnahme abgefangen wurde, wird ein Ausnahmeobjekt generiert und übergeben Bei der Verarbeitung lautet die grundlegende Syntax wie folgt.

try{
    
    
	//可能抛出异常的代码
}catch(Exception e){
    
    
	//处理异常
}
package com.song.exception;

public class Test {
    
    
	public static void main(String[] args) {
    
    
		try {
    
    
			int num = 10/10;
		}catch (Exception e) {
    
    
			// TODO: handle exception
			if(e.getMessage().equals("/ by zero")) {
    
    
			//用err的输出为红色
				System.err.println("分母不能为0");
			}
		}
	}
}

Sie können nicht nur versuchen, zu fangen, sondern auch das Schlüsselwort finally verwenden , um Ausnahmen zu behandeln. Welche Funktion hat finally?

Unabhängig davon, ob das Programm eine Ausnahme auslöst oder nicht, wird der Code im finally-Codeblock ausgeführt und folgt normalerweise normalerweise dem catch-Codeblock. Die grundlegende Syntax lautet wie folgt.

try{
    
    
	//可能抛出异常的代码
}catch(Exception e){
    
    
	//处理异常
}finally{
    
    
	//必须执行的代码
}

ein Beispiel:

package com.song.excepton;

public class Test2 {
    
    
	public static void main(String[] args) {
    
    
		System.out.println(test());
	}
	public static int test() {
    
    
		try {
    
    
			System.out.println("try...");
			return 10;
		}catch(Exception e) {
    
    
			
		}finally{
    
    
			System.out.println("finally...");
			return 20;
		}
	}

}

Die Ausgabe lautet:
versuchen ...
endlich ...
20

Erklären Sie, dass unabhängig davon, ob das Programm eine Ausnahme auslöst oder nicht, der Code im finally-Codeblock definitiv ausgeführt wird und das Rückgabeergebnis in finally das bereits beim Versuch zurückgegebene Ergebnis überschreibt und an den externen Aufrufer zurückkehrt Die Freigabe von Ressourcen erfolgt in der Regel endgültig.

3. Abnormal

Java kapselt alle zur Laufzeit auftretenden Fehler in Klassen und ist keine Klasse, sondern eine Reihe von Klassen. Gleichzeitig besteht eine hierarchische Beziehung zwischen diesen Klassen, die Schicht für Schicht anhand einer Baumstruktur bewertet werden . Die oberste Klasse ist Throwable, der Wurzelknoten aller abnormalen Klassen .

Throwable hat zwei direkte Unterklassen: Fehler und Ausnahme. Throwable, Error, Exception werden alle im Paket java.lang gespeichert.

Die Unterklassen von Error umfassen VirtualMachineError (Ausnahme der virtuellen Maschine), AWTError, IOError (Ausnahme des Eingabe- und Ausgabestreams).

Die Unterklassen von VirtualMachineError sind StackOverflowError (Ausnahme für Stapelspeicherüberlauf) und OutOfMemoryError (Ausnahme für Speicherüberlauf). Wird verwendet, um Systemprobleme wie Speicherüberlauf zu beschreiben, die Systemfehler sind und nicht behandelt werden können.

Die Unterklassen von Exception umfassen IOException und RuntimeException. IOException wird im Paket java.io und RuntimeException im Paket java.lang gespeichert.

Zu den Unterklassen von IOException gehören FileLockInterruptionException, FileNotFoundException und FilerException. Diese Ausnahmen sind normalerweise Fehler, die während der Dateiübertragung über E / A-Streams auftreten.

Die Unterklassen von RuntimeException umfassen:

  • (1) ArithmeticException: Zeigt eine abnormale mathematische Operation an.
  • (2) ClassNotFoundException: Undefinierte Ausnahme der Tabellenklasse.
  • (3) IlllelArgumentException: Zeigt an, dass das Parameterformat falsch ist.
  • (4), ArrayIndexOutOfBounds: Gibt an, dass der Array-Index außerhalb der Grenzen liegt.
  • (5), NullPointException: Gibt eine Nullzeigerausnahme an.
  • (6) NoSuchMethodException: Gibt an, dass die Methode eine undefinierte Ausnahme ist.
  • (7), NumberFormatException: Stellt die Typkonfliktausnahme dar, die auftritt, wenn andere Datentypen in numerische Typen konvertiert werden.
4 、 werfen 和 wirft

Throw und Throws sind zwei Schlüsselwörter, die Java bei der Behandlung von Ausnahmen verwendet. Beide können zum Auslösen von Ausnahmen verwendet werden, die verwendeten Methoden und Bedeutungen sind jedoch völlig unterschiedlich.

Es gibt drei Möglichkeiten, Ausnahmen in Java auszulösen:

  • (1) Try-Catch
  • (2) Die Verwendung von throw bedeutet, dass der Entwickler aktiv eine Ausnahme auslöst, dh er muss eine Ausnahme auslösen, wenn er den Wurfcode liest. Die grundlegende Syntax: throw new Exception () ist eine Möglichkeit, eine Ausnahme basierend auf der Logik aktiv auszulösen des Codes.
public class Test {
    
    
	public static void main(String[] args) {
    
    
		int[] array = {
    
    1,2,3};
		test(array,2);
	}
	
	public static void test(int[] array,int index) {
    
    
		if(index >= 3 || index < 0) {
    
    
			try {
    
    
				throw new Exception();
			} catch (Exception e) {
    
    
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}else {
    
    
			System.out.println(array[index]);
		}
	}
}
  • (3) Sowohl Try-Catch als auch Throw wirken auf bestimmte Logikcodes und Throws auf Methoden, die die Ausnahmen beschreiben, die von der Methode ausgelöst werden können.

Wenn es sich bei der ausgelösten Methode um eine RuntimeException oder deren Unterklasse handelt, muss sie nicht behandelt werden, wenn sie extern aufgerufen wird, und die JVM wird sie verarbeiten.

Wenn die ausgelöste Methode eine Ausnahme oder eine Unterklasse ist, muss sie bei externen Aufrufen behandelt werden, andernfalls wird ein Fehler gemeldet.

public class Test {
    
    
	public static void main(String[] args) throws Exception {
    
    
		test("123");
	}
	
	public static void test(String str) throws Exception {
    
    
		int num = Integer.parseInt(str);
	}
	
}
5. Drei Arten der Ausnahmeerfassung:
  • Try-Cath automatisch erfassen
  • werfen Aktiv eine Ausnahme auslösen
  • Throws modifiziert Methoden, die Ausnahmen auslösen können
6, benutzerdefinierte Ausnahme

Neben der Verwendung von von Java bereitgestellten Ausnahmen können Sie Ausnahmen auch an die Anforderungen anpassen.

package com.song.exception;

public class MyNumberException extends RuntimeException {
    
    
	public MyNumberException(String error) {
    
    
		super(error);
	}
}
package com.song.exception;

public class Test {
    
    
	public static void main(String[] args){
    
    
		Test test = new Test();
		System.out.println(test.add("a"));
	}
	
	public int add(Object object){
    
    
		if(object instanceof Integer) {
    
    
			int num = (int)object;
			return ++num;
		}else {
    
    
			String error = "传入的参数不是整数类型";
			MyNumberException myNumberException = new MyNumberException(error);
			throw myNumberException;
		}
	}
}

Ich denke du magst

Origin blog.csdn.net/qq_40220309/article/details/105623732
Empfohlen
Rangfolge