26-Erfassung und Behandlung von Ausnahmen

Abnormale Erfassung und Handhabung

Java ist leistungsstark bei der Behandlung von Ausnahmen

Erkennen Sie die Auswirkungen von Anomalien auf das Programm

Ausnahme bezieht sich auf den Befehlsstrom, der die Unterbrechung des Programms verursacht hat.
Nachdem der Fehler aufgetreten ist, wird das gesamte Programm nicht in der vorgesehenen Weise ausgeführt, sondern die Ausführung wird unterbrochen. Um sicherzustellen, dass das Programm nach dem Auftreten eines nicht schwerwiegenden Fehlers weiterhin normal abgeschlossen werden kann, um einen reibungslosen Programmfortschritt zu gewährleisten.

Ausnahme behandeln

Die Ausnahmebehandlung in Java kann mithilfe der Schlüsselwörter try, catch und finally durchgeführt werden. Die grundlegende Verarbeitungsstruktur lautet wie folgt:

try{
    
    
	// 可能出现异常的语句
}[catch (异常类型 异常对象){
    
    
	// 异常处理
}
catch (异常类型 异常对象){
    
    
	// 异常处理
}...][finally{
    
    
	// 不管异常是否处理都要执行
}]

Kombinationen, die verwendet werden können: try ... catch, try ... catch ... finally, try ... finally.
Zu diesem Zeitpunkt, wenn die Ausnahme behandelt wird, ist die Ausgabe ein Objekt der Ausnahmeklasse Das Objekt wird direkt gedruckt. Die erhaltenen Ausnahmeinformationen sind unvollständig. Wenn Sie die abgeschlossenen Ausnahmeinformationen abrufen möchten, können Sie die in der Ausnahmeklasse bereitgestellte printStackTrace () -Methode verwenden, um den Vorgang abzuschließen.
Für das Ausnahmebehandlungsformat kann am Ende auch ein finally-Block hinzugefügt werden, um das Beenden der Ausnahmebehandlung anzuzeigen, unabhängig davon, ob das Programm abnormal ist oder nicht.

Behandlung mehrerer Ausnahmen

Es werden mehrere Ausnahmen generiert. In diesem Fall können auch mehrere Fänge verwendet werden, um Ausnahmen zu erfassen.
Ausnahmetyp:

  • Eingabeparameter vergessen: Array außerhalb der Grenzen Ausnahme
  • Eingabetypfehler: abnormales Zahlenformat
  • Abnormale Daten: Dividende darf nicht 0 sein

Ausnahmebehandlungsprozess

Bei der Ausnahmebehandlung werden alle Ausnahmen erfasst, von denen möglicherweise eindeutig bekannt ist, dass sie generiert werden. Obwohl eine gute Codestruktur erzielt werden kann, ist diese Art des Codeschreibens sehr mühsam. Wenn Sie also eine vernünftige Ausnahme machen möchten, müssen Sie diese löschen es, nachdem die Ausnahme generiert wurde. Was hat das Programm getan?
DzeAJg.png

  1. Ausnahmen treten nur während der Ausführung des Programms auf. Sobald während der Ausführung des Programms eine Ausnahme auftritt, wird der angegebene Typ des Ausnahmeklassenobjekts automatisch instanziiert.
  2. Wenn das Programm derzeit keine Unterstützung für die Ausnahmebehandlung bietet, verwendet es die JVM-Standardausnahmebehandlung, druckt zuerst die Ausnahmeinformationen und beendet dann die Ausführung.
  3. Wenn das Programm zu diesem Zeitpunkt eine Ausnahmebehandlung bereitstellt, wird das instanziierte Objekt der generierten Ausnahmeklasse von der try-Anweisung erfasst.
  4. Nachdem try die Ausnahme abgefangen hat, führt es einen Vergleich mit dem übereinstimmenden catch-Ausnahmetyp durch. Wenn es übereinstimmt, wird der catch für die Ausnahmebehandlung verwendet. Wenn keine erfolgreiche Übereinstimmung vorliegt, bedeutet dies, dass die Ausnahme nicht behandelt werden kann.
  5. Schließlich wird die finally-Anweisung ausgeführt. Nachdem die finally-Anweisung abgeschlossen ist, wird weiter beurteilt, ob die aktuelle Ausnahme verarbeitet wurde. Wenn sie verarbeitet wird, wird sie weiterhin ausgeführt, und wenn sie nicht verarbeitet wird, wird sie übergeben zur Standardverarbeitung an die JVM übergeben.

In der gesamten Ausnahmebehandlung ist die eigentliche Operation immer noch ein instanziiertes Objekt einer Ausnahmeklasse, sodass der instanziierte Objekttyp dieser Ausnahmeklasse zum Kernschlüssel für das Verständnis der Ausnahmebehandlung wird.
Die größte Art von Ausnahme, die in einem Programm behandelt werden kann, ist Throwable mit zwei Unterkategorien:

  • Fehler: Der Fehler trat auf, wenn das Programm zu diesem Zeitpunkt noch nicht ausgeführt wurde und während der Entwicklung nicht verarbeitet werden kann.
  • Ausnahme: Der Entwickler kann die Ausnahme im Programm behandeln.

Durch Analyse kann festgestellt werden, dass das instanziierte Objekt, das beim Auftreten einer Ausnahme eine Ausnahme erzeugt, gemäß dem Objektreferenzprinzip automatisch in die übergeordnete Klasse transformiert werden kann. Gemäß dieser Logik können alle Ausnahmen von behandelt werden Ausnahme.

catch(Exception e){
    
    
	e.printStackTrace();
}

Wenn Sie nicht sicher sind, welche Ausnahmen generiert werden, ist dies einfach zu handhaben. Das zu behandelnde Problem besteht darin, dass die Beschreibung der Fehlerinformationen nicht klar ist. Daher ist die separate Behandlung von Ausnahmen eine bequemere und klarere Art der Behandlung.
Wenn in Zukunft mehrere Ausnahmen gleichzeitig verarbeitet werden, sollte die Ausnahme mit einem großen Erfassungsbereich nach der Ausnahme mit einem kleinen Erfassungsbereich platziert werden.

wirft ein Schlüsselwort

Durch das vorherige Programm kann eine Ausnahme bei der Programmausführung generiert werden. Unter der Annahme, dass eine Methode definiert ist, sollte dem Benutzer klar mitgeteilt werden, welche Ausnahme generiert wird. Zu diesem Zeitpunkt können Sie das Schlüsselwort throw in der Methodendeklaration verwenden, um den Ausnahmetyp zu markieren.

class Math{
    
    
	//这个代码执行时可能会产生算术异常,如果产生异常"调用处"处理
	public static int div(int x, int y) throws ArithmeticException{
    
    
		return x/y;
	}
}
main throws Exception{
    
    		//主方法向上抛出异常
	Math.div(10,2);
}

Die Hauptmethode selbst ist ebenfalls eine Methode, und die generierten Ausnahmen können auch nach oben geworfen werden. Dies bedeutet, dass die JVM für die Behandlung der Ausnahmen verantwortlich ist.

Schlüsselwort werfen

Auslösen bedeutet, eine Ausnahme manuell auszulösen. Zu diesem Zeitpunkt wird ein instanziiertes Objekt der Ausnahme manuell generiert und die Ausnahme ausgelöst.

main{
    
    
	try{
    
    		//异常对象是手工定义的
		throw new Exception("自己跑着玩的对象。");
	} catch(Exception e){
    
    
		e.printStackTrace();
	}
	
}

Interview: Erklären Sie den Unterschied zwischen Würfen und Würfen?

  • throw: Wird in Codeblöcken verwendet, hauptsächlich zum manuellen Auslösen von Ausnahmeobjekten.
  • Throws: wird in der Methodendefinition verwendet. Dies bedeutet, dass die Ausnahmen, die diese Methode möglicherweise erzeugt, dem aufrufenden Ort klar mitgeteilt und vom aufrufenden Ort behandelt werden.

Ausnahmehandlungsmodell

class Math{
    
    
	//这个代码执行时可能会产生异常,如果产生异常"调用处"处理
	public static int div(int x, int y) throws Exception{
    
    
		int temp = 0;
		print("start");
		try{
    
    
			temp = x/y;
		} catch(Exception e){
    
    
			throw e; 		//向上抛异常对象
		} finally{
    
    
			print("end");
		}
		return temp;
	}
}
main{
    
    		
	try{
    
    
		Math.div(10,2);
	} catch (Exception e){
    
    
		e.printStackTrace();
	}
}

Für diesen Typ kann der Haken in Math weggelassen werden. Diese Art des Ausnahmebehandlungsformats ist in der tatsächlichen Entwicklung (für den Ressourcenzugriff) sehr wichtig.

RuntimeException

Solange die Methode Auslöser hat, teilt sie dem Benutzer mit, welche Art von Ausnahme aufgetreten ist.
Wenn der Entwickler bei der aktuellen Programmausführung manuell verarbeiten muss, solange die durch Würfe definierte Methode verwendet wird, ist der Code zu umständlich. Daher wird im Entwurfsprozess eine flexible optionale Ausnahmebehandlung für die übergeordnete Klasse "RuntimeException" bereitgestellt. Unterklassen von Ausnahmen erfordert möglicherweise keine obligatorische Handhabung.
Interview: Erklären Sie den Unterschied zwischen RuntimeException und Exception? Liste der allgemeinen RuntimeException.

  • RuntimeException ist eine Unterklasse von Exception.
  • Die mit RuntimeException gekennzeichnete Ausnahme erfordert keine obligatorische Behandlung, während die Exception-Ausnahme obligatorisch sein muss.
  • : : NumberFormatException 、 ClassCastException 、 NullPointerException

Benutzerdefinierte Ausnahmeklasse

Das JDK bietet eine große Anzahl von Ausnahmetypen, die in der tatsächlichen Entwicklung möglicherweise nicht ausreichen. Berücksichtigen Sie derzeit benutzerdefinierte Ausnahmetypen.
Zwei Implementierungsschemata: Exception oder RuntimeException erben;

class BombException extends Exception{
    
    
	public BombException(String msg){
    
    
		super(msg);
	}
}
class Food{
    
    
	public static void eat(int num) throws BombException{
    
    
		if(num > 10 ){
    
    
			throw new BombException("TOO MUCH");
		} else{
    
    
			print("normal");
		}
	}
}

behaupten

Nach JDK1.4 wird eine Assertionsfunktion hinzugefügt, um zu bestätigen, dass der Code nach dem Ausführen einer bestimmten Zeile das erwartete Ergebnis sein muss. Die tatsächliche Entwicklungs-Assertion ist möglicherweise nicht korrekt und es kann Abweichungen geben, aber diese Abweichung sollte die normale Ausführung nicht beeinträchtigen des Programms.
Die Zusicherung wird nicht als Schritt festgelegt, den ein Programm in Java ausführen muss, und kann unter einer bestimmten Umgebung aktiviert werden.

Ich denke du magst

Origin blog.csdn.net/MARVEL_3000/article/details/111467178
Empfohlen
Rangfolge