[Für Java-Anfänger] Informationen zur Ausnahmebehandlung

Was ist eine Ausnahme

Bezieht sich auf einige Probleme, die während der Programmausführung auftreten.

Es gibt verschiedene Typen, z. B., aber die vom Benutzer verwendete Software stoppt nicht, funktioniert nicht mehr oder wird auch dann nicht normal verarbeitet, wenn ein Problem auftritt. Unterlassen Sie. Daher müssen Programmierer ** "im Notfall programmieren **", um mit verschiedenen Situationen fertig zu werden. Man kann sagen, dass diese Ausnahmebehandlung eine entsprechende Rolle spielt.

try、catch、finally

Schließen Sie die Verarbeitung, die eine Ausnahme verursachen kann, in einen try-Block ein und beschreiben Sie die Verarbeitung, wenn eine Ausnahme im catch-Block auftritt, der auf den try-Block folgt.

try Im try-Block können mehrere Anweisungen geschrieben werden. Wenn eine Ausnahme auftritt, wird die nachfolgende Verarbeitung im try-Block übersprungen ** und die Steuerung wird sofort auf den entsprechenden catch-Block übertragen. Sobald die Steuerung auf den Catch-Block übertragen wurde, wird die nachfolgende Try-Block-Verarbeitung unabhängig von der Notwendigkeit nicht ausgeführt.

catch Der catch-Block ist ein Block zur Beschreibung der Verarbeitung, wenn eine Ausnahme auftritt. ** Der Zweck des catch-Blocks besteht darin, das Programm in den normalen Zustand zurückzusetzen **. Wenn die Verarbeitung dieses Blocks abgeschlossen ist, "wurde das Problem behoben und der normale Betrieb wiederhergestellt. Da für jeden aufgetretenen Ausnahmetyp mehrere Fangblöcke beschrieben werden können, kann der Behandlungsprozess für jeden Ausnahmetyp geändert werden.

Es ist auch möglich, den Fangblock wegzulassen. Das Weglassen des catch-Blocks ist ein Fall, in dem die Ausnahmebehandlungsmethode innerhalb der Methode nicht bestimmt werden kann.

Wenn Sie mehrere Catch-Blöcke vorbereiten, ** Wenn Sie Code schreiben, der von keinem Ausnahmemuster erreicht werden kann, generiert der Compiler einen Kompilierungsfehler. ** ** **

[Beispiel eines nicht erreichbaren Falls]

SampleException



 public class SampleException extends Exception{}

SubSampleException



 public class SubSampleException extends SampleException{}

Main


 
 public class Main {
 	public static void main(String[] args) {
 		try {
 			sample();
 			sub();
 		} catch (SampleException e) {
 			System.out.println("A");
 		} catch (SubSampleException e) {
 			System.out.println("B");
 		}
 	}
 
 	private static void sample() throws SampleException {
 		throw new SampleException();
 	}
 
 	private static void sub() throws SubSampleException{
 	
 }

Hauptmethode Rufen Sie die sample () -Methode in der ersten Zeile des try-Blocks auf → catch (SampleException e) {} Empfängt den Block und führt den im Block beschriebenen Verarbeitungsinhalt aus.

Rufen Sie in der zweiten Zeile der Hauptmethode die Methode sub () auf → ** catch (SampleException e) {} Block ** empfängt und führt den im Block beschriebenen Verarbeitungsinhalt aus. Fangen Sie mit der Superklasse SampleException ab, bevor Sie SubSampleException erreichen.

Deshalb,

[Ausgabeergebnis] A A

Das ist das Ergebnis.

SubSampleException wird durch Aufrufen der sub () -Methode in der zweiten Zeile des try-Blocks ausgelöst. Da die SampleException-Klasse jedoch eine Oberklasse der SubSampleException-Klasse ist, kann der SampleException-Block diese Ausnahme auch abfangen. Daher wird die Verarbeitung in dem Block ausgeführt, der von der zuvor geschriebenen SampleException-Klasse empfangen wurde, bevor der Block die Ausnahme von SubSampleException empfängt.

In einem solchen Fall wird festgestellt, dass der catch-Block in SubSampleException nicht erreichbarer Code ist, und der Compiler löst einen Kompilierungsfehler aus.

finally

Unabhängig davon, ob eine Ausnahme auftritt oder nicht, existiert der auszuführende Prozess unabhängig von der Form des Programms. Der finally-Block beschreibt die Verarbeitung, die Sie ausführen möchten, unabhängig davon, ob eine Ausnahme aufgetreten ist oder nicht.

Wenn der finally-Block beschrieben wird und keine Ausnahme auftritt, wird der im finally-Block beschriebene Prozess ausgeführt, nachdem der try-Block ausgeführt wurde. Wenn eine Ausnahme auftritt, wird die Steuerung vom try-Block zum catch-Block übertragen, und dann wird der finally-Block ausgeführt.

Der finally-Block dient zur Beschreibung des Prozesses, den Sie ausführen möchten, unabhängig davon, ob eine Ausnahme aufgetreten ist. Dies gilt auch dann, wenn er im ** catch-Block zurückgegeben wird und die Steuerung an die aufrufende Methode zurückgibt. Vorher wird der finally-Block immer ausgeführt. ** ** **

Der finally-Block muss nicht nach Ausnahmetyp getrennt werden.

Der finally-Block wird nicht nur ausgeführt **, wenn die System.exit-Methode im try-Block oder catch-Block aufgerufen wird, um die Anwendung zwangsweise zu beenden, oder wenn die JVM oder das Betriebssystem abstürzt **.

Informationen zu Regeln beim Schreiben der Try-Catch-finally-Syntax

→ Daher kann die Reihenfolge nicht wie "catch-try-finally" und "try-finally-catch" geändert werden.

sample



public class Main {
	public static void main(String[] args) {
		try {
			try {
				String[] array = { "A", "B", "C" };
				System.out.println(array[3]); //①
			} catch (ArrayIndexOutOfBoundsException e) {
				System.out.println("D"); //②
			} finally {
				System.out.println("E"); //③
			}
		} catch (ArrayIndexOutOfBoundsException e) {
			System.out.println("F");
		} finally {
			System.out.println("G"); //④
		}
	}
}

Wenn mehrere try-catch auf diese Weise verschachtelt sind, ist es ** der nächste catch-Block, der der Ausnahme entspricht, die die ausgelöste Ausnahme empfängt. ** ** **

Also im obigen Code, (1) Da versucht wurde, den vierten Wert für ein Array-Array auszugeben, das nur drei Werte im try-Block enthält, wurde die Steuerung auf den cacth-Block übertragen. (2) Nach der Verarbeitung mit dem nächsten Fangblock, der der in (1) aufgetretenen Ausnahme entspricht. ③ Führen Sie die Verarbeitung im inneren finally-Block durch. ④ Schließlich blockiert das Äußere schließlich Prozesse.

Es wird der Fluss. Zu diesem Zeitpunkt wird der ** finally-Block immer ausgeführt, sodass sowohl der innere als auch der äußere finally-Prozess ausgeführt werden. ** ** **

werfen und wirft

Die Java-Ausnahmeverarbeitung umfasst die Verarbeitung "throw" und "throw". Beide bedeuten "werfen" den Prozess, aber der Inhalt ist sehr unterschiedlich.

throw Lösen Sie absichtlich eine Ausnahme aus, um die Ausnahme zu behandeln. ** Beschreiben Sie in der Methode. ** ** **

example


void sample (int num) {
    if(num < 0) { 
        throw new IllegalArgumentException("Negative Werte können nicht verwendet werden.");
    }
}

throws Ausnahmen, die in einer Methode auftreten, werden nicht in der ** eigenen Methode verarbeitet, sondern vom Aufrufer der Methode behandelt. ** ** ** Die Ausnahmeverarbeitung wird in der Methode, in die Würfe geschrieben werden, nicht beschrieben, und die Ausnahmeverarbeitung wird in der Methode auf der Seite ausgeführt, die die Methode aufgerufen hat, in der Würfe geschrieben werden.

example


public static void sample() throws IOException{
	FileWriter fw = new FileWriter("data.txt");
}

FileWriter ist eine einfache Klasse zum Schreiben von Zeichendateien. Wenn Sie sie nicht mit der try-catch-Anweisung abfangen, führt dies zu einem Kompilierungsfehler ** Ausnahme prüfen **, sodass Sie bei der Verarbeitung eine try-catch-Anweisung schreiben müssen. Durch die Beschreibung von Würfen lässt der Aufrufer der Methode sie jedoch korrespondieren.

Über geprüfte Ausnahmen und nicht geprüfte Ausnahmen

Es gibt zwei Haupttypen von Problemen, die während der Programmausführung in Java auftreten.

Es gibt zwei.

Ausnahmen werden weiter in aktivierte und nicht aktivierte Ausnahmen unterteilt.

Java basiert auf aktivierten Ausnahmen, um zu verhindern, dass Programmierer vergessen, die Ausnahmebehandlung zu schreiben. In der Geschichte der Software, die riesig und kompliziert wurde, hat die Anzahl der Fehler, die Programmierer vergessen, die Ausnahmebehandlung zu beschreiben, zugenommen, und der Hintergrund ist, dass die automatische Überprüfungsfunktion des Compilers aus der Reflexion übernommen wurde, die den Fehler verursacht hat. ..

Java-Ausnahmeklassen sind grob unterteilt

Es ist in eine aktivierte Ausnahme und eine nicht aktivierte Ausnahme unterteilt und stellt einen Fehler dar.

Alle Unterklassen der Exception-Klasse sind geprüfte Ausnahmen, mit Ausnahme von ** RuntimeException und seinen Unterklassen. ** ** ** Aus diesem Grund müssen Ausnahmeklassen, die von der Ausnahmeklasse erben, entweder try-catch oder deklarieren in der throw-Klausel. Andererseits werden ** RuntimeException und ihre Unterklassen als ungeprüfte Ausnahmen behandelt, selbst wenn sie Unterklassen von Exception sind. ** (RuntimeException ist eine Unterklasse von Exception) Daher sind RuntimeException und ihre Unterklassen nicht gezwungen, try-catch durchzuführen. Natürlich können Sie einen Try-Catch schreiben, ohne dazu gezwungen zu werden. Außerdem spielen ** nicht aktivierte Ausnahmen keine Rolle, wenn sie nicht in der throw-Klausel deklariert sind. ** ** **

Der Fehler wird durch die Fehlerklasse dargestellt, aber ** es ist die tatsächlich verwendete Unterklasse. ** ** ** Zu den von Error geerbten Unterklassen gehören beispielsweise OutOfMemoryError, NoClassDefFoundError und StackOverflowError. Um als ** Fehler klassifiziert zu werden, ist es außerdem erforderlich, Fehler zu erben. ** ** ** Wenn diese Probleme auftreten, erstellt die JVM eine Instanz der entsprechenden Fehlerunterklasse und benachrichtigt das Programm. Dies ist der gleiche Mechanismus wie bei Ausnahmen, aber ** Fehler müssen im Gegensatz zu Ausnahmen nicht "programmiert" werden. ** Daher ist es nicht erforderlich, zu versuchen, mit Würfen zu fangen oder zu deklarieren. (Es ist nur "nicht erforderlich" und kann bei Bedarf abgefangen und verarbeitet werden.)


――Welche Ausnahmen unterstützt jede Klasse?

Für etc.

Java SE 8 API-Spezifikation https://docs.oracle.com/javase/jp/8/docs/api/ Sie können die Details von überprüfen.

Recommended Posts

[Für Java-Anfänger] Informationen zur Ausnahmebehandlung
[Java] Informationen zur Behandlung von Try-Catch-Ausnahmen
Java-Ausnahmebehandlung?
Informationen zur Ausnahmebehandlung
Informationen zur Ausnahmebehandlung
[Java] Ausnahmebehandlung
☾ Java / Ausnahmebehandlung
Informationen zur Behandlung von Java-Ausnahmen
Behandlung von Java-Ausnahmen
Informationen zur Behandlung von Ruby-Ausnahmen
[Java] Praxis der Ausnahmebehandlung [Ausnahme]
Java-Debug-Ausführung [für Java-Anfänger]
[Java] Grundlegende Aussage für Anfänger
Verwendungsregeln für die Behandlung von Java-Ausnahmen
Java für Anfänger, Daten verstecken
Ausnahmebehandlungstechniken in Java
Java-Anwendung für Anfänger: Stream
[Java Silver] (Ausnahmebehandlung) Informationen zu den Anweisungen try-catch-finally und try-with-resource
[Inhouse-Studiensitzung] Behandlung von Java-Ausnahmen (26.04.2017)
[Für Anfänger] Über die von Java Gold erklärte JavaScript-Syntax
Ausnahmebehandlung
Klassen und Instanzen Java für Anfänger
Ausnahmebehandlung Ausnahme
[Einführung in Java] Informationen zur Ausnahmebehandlung (try-catch-finally, aktivierte Ausnahme, nicht aktivierte Ausnahme, Würfe, Würfe)
Nutzen Sie entweder für die individuelle Ausnahmebehandlung in der Java Stream-API
Lernen Sie aus "Na und", den Grundlagen von Java [für Anfänger]
Über das Verfahren, damit Java funktioniert
[Für Anfänger] Unterschied zwischen Java und Kotlin
Java (Ausnahmebehandlung, Threading, Sammlung, Datei-E / A)
try-catch-finally Ausnahmebehandlung Verwendung von Java
Über die Java-Schnittstelle
Behandlung von Ruby-Ausnahmen
Für JAVA-Lernen (2018-03-16-01)
[Java] Über Arrays
[Java] Ausnahmeinstanz
Etwas über Java
Wo ist mit Java?
Informationen zu Java-Funktionen
Ruby-Ausnahmebehandlung
Über Java-Threads
2017 IDE für Java
[Java] -Schnittstelle
Über die Java-Klasse
Informationen zu Java-Arrays
Über Java-Vererbung
Java für Anweisung
Über Java Var
Über Java Literal
Informationen zu Java-Befehlen
Eine Geschichte über die Java 11-Unterstützung für Webdienste
Eine Sammlung einfacher Fragen für Java-Anfänger
[Für Anfänger] Über Lambda-Ausdrücke und Stream-API
[Einführung in Java] Grundlagen der Java-Arithmetik (für Anfänger)
Fragen in Java-Ausnahmebehandlung werfen und versuchen-fangen
Verwenden wir Java New FileIO! (Einführung für Anfänger)
Informationen zur Java-Protokollausgabe
Informationen zur Java-Funktionsschnittstelle
[Java] für Anweisung, während Anweisung
Java, über zweidimensionales Array