Für diejenigen, die gerade mit dem Programmieren einschließlich der Java-Sprache begonnen haben, und für diejenigen, die es bereits gelernt haben, zur Überprüfung Dieses Mal schreibe ich, um mehr über ** Ausnahmebehandlung ** zu erfahren.
Wenn der Quellcode einen Grammatikfehler enthält, wird zum Zeitpunkt der Kompilierung ein Fehler ausgegeben, der nicht ausgeführt werden kann. Daher ist es möglich, den Grammatikfehler oder -fehler zu korrigieren.
Ein Fehler, der zum Zeitpunkt der Kompilierung nicht bekannt ist, aber nach der Ausführung festgestellt wird, wird als Ausnahme bezeichnet.
Um die oben erwähnte unerwartete Operation (Ausnahme) zu verhindern, wird die entsprechende Verarbeitung als ** Ausnahmeverarbeitung ** bezeichnet.
・ Throwable ← Fehler, Ausnahme Superklasse (Elternklasse)
Unterklassen (untergeordnete Klassen) der Throwable-Klasse ・ ** Fehlerklasse ** ・ ** Ausnahme **
Unterklassen (untergeordnete Klassen) der Exception-Klasse ・ ** RuntimeException-Klasse ** ・ ** Andere Klassen **
Die RuntimeException-Klasse verfügt auch über Unterklassen (untergeordnete Klassen).
try-catch Lassen Sie uns zuerst den Code normal schreiben.
Main.java
class Error {
public static void main(String[] args) {
String[] fruits = {"Apfel", "Banane", "Mandarine"};
//Extrahieren Sie das Fruchtarray nacheinander, aber versuchen Sie, außerhalb der Elemente des Arrays darauf zuzugreifen
for(int i = 0; i < 4; i++) {
System.out.println(fruits[i]);
}
System.out.println("Alle Früchte angezeigt");
}
}
Ausgabeergebnis
Apfel
Banane
Mandarine
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3
at Main.main(Main.java:6)
Es wurde wie oben angezeigt. Das letzte "Alle Früchte anzeigen" wird nicht ausgegeben und das Programm endet in der Mitte.
Als nächstes ändern wir den obigen Code mit der try-catch-Anweisung.
Beschreiben Sie im try-Block
den Teil, in dem die Ausnahme wahrscheinlich auftritt.
Schreiben Sie `catch (Name der Ausnahmeklassenname) und
Beschreiben Sie im "catch-Block" die Verarbeitung, wenn eine Ausnahme auftritt.
Main.java
class Main {
public static void main(String[] args) {
String[] fruits = {"Apfel", "Banane", "Mandarine"};
try {
//Verarbeitung, die wahrscheinlich eine Ausnahme verursacht
for(int i = 0; i < 4; i++) {
System.out.println(fruits[i]);
}
} catch(ArrayIndexOutOfBoundsException e) {
//Was tun, wenn eine Ausnahme auftritt?
System.out.println("Ausnahme aufgetreten");
}
System.out.println("Alle Früchte angezeigt");
}
}
Wenn du rennst
Ausgabeergebnis
Apfel
Banane
Mandarine
Ausnahme aufgetreten
Alle Früchte angezeigt
Es wurde wie oben ausgegeben. In der vierten Schleife ist eine Ausnahme aufgetreten, und die Verarbeitung innerhalb des catch-Blocks wird ausgeführt. Und das Programm wird bis zum letzten "Alle Früchte anzeigen" ausgegeben, ohne in der Mitte zu enden.
finally
Beschreiben Sie im "finally-Block" den Prozess, den Sie ausführen möchten, unabhängig davon, ob eine Ausnahme auftritt oder nicht.
Wenn keine Ausnahme auftritt (Zugriff innerhalb eines Elements des Arrays)
Main.java
class Main {
public static void main(String[] args) {
String[] fruits = {"Apfel", "Banane", "Mandarine"};
try {
//Verarbeitung, die wahrscheinlich eine Ausnahme verursacht
for(int i = 0; i < 3; i++) {
System.out.println(fruits[i]);
}
} catch(ArrayIndexOutOfBoundsException e) {
//Was tun, wenn eine Ausnahme auftritt?
System.out.println("Ausnahme aufgetreten");
} finally {
//Immer mit oder ohne Ausnahmen ausgeführt
System.out.println("Achten Sie darauf, zu verarbeiten");
}
System.out.println("Alle Früchte angezeigt");
}
}
Wenn du rennst
Ausgabeergebnis
Apfel
Banane
Mandarine
Achten Sie darauf, zu verarbeiten
Alle Früchte angezeigt
Die Verarbeitung im finally-Block wird wie oben beschrieben ausgeführt.
Das nächste Mal, wenn eine Ausnahme auftritt (Zugriff außerhalb der Elemente des Arrays)
Main.java
class Main {
public static void main(String[] args) {
String[] fruits = {"Apfel", "Banane", "Mandarine"};
try {
//Verarbeitung, die wahrscheinlich eine Ausnahme verursacht
for(int i = 0; i < 4; i++) {
System.out.println(fruits[i]);
}
} catch(ArrayIndexOutOfBoundsException e) {
//Was tun, wenn eine Ausnahme auftritt?
System.out.println("Ausnahme aufgetreten");
} finally {
//Immer mit oder ohne Ausnahmen ausgeführt
System.out.println("Achten Sie darauf, zu verarbeiten");
}
System.out.println("Alle Früchte angezeigt");
}
}
Wenn du rennst
Ausgabeergebnis
Apfel
Banane
Mandarine
Ausnahme aufgetreten
Achten Sie darauf, zu verarbeiten
Alle Früchte angezeigt
Es wurde wie oben ausgegeben. Eine Ausnahme wird ausgelöst und die Verarbeitung innerhalb des catch-Blocks wird ausgeführt. Dann wird die Verarbeitung im finally-Block ausgeführt und die Ausgabe erfolgt bis zur letzten "Anzeige aller Früchte".
Als Kombination des Schreibstils wie oben ・ Try-Catch ・ Endlich versuchen ・ Versuchen Sie es endlich Ist in Ordnung!
Die folgende Schreibmethode führt zu einem Kompilierungsfehler.
・ Versuchen Sie nur zu blockieren
Main.java
class Main {
public static void main(String[] args) {
String[] fruits = {"Apfel", "Banane", "Mandarine"};
//Nur Try-Blöcke sind Kompilierungsfehler
try {
for(int i = 0; i < 4; i++) {
System.out.println(fruits[i]);
}
}
System.out.println("Alle Früchte angezeigt");
}
}
・ Endlich versuchen, endlich versuchen
Main.java
class Main {
public static void main(String[] args) {
String[] fruits = {"Apfel", "Banane", "Mandarine"};
// try-finally-catch ist ein Kompilierungsfehler
try {
for(int i = 0; i < 4; i++) {
System.out.println(fruits[i]);
}
} finally {
System.out.println("Achten Sie darauf, zu verarbeiten");
} catch(ArrayIndexOutOfBoundsException e) {
System.out.println("Ausnahme aufgetreten");
}
// catch-finally-versuchen Sie auch Kompilierungsfehler
catch(ArrayIndexOutOfBoundsException e) {
System.out.println("Ausnahme aufgetreten");
} try {
for(int i = 0; i < 4; i++) {
System.out.println(fruits[i]);
}
} finally {
System.out.println("Achten Sie darauf, zu verarbeiten");
}
}
}
Ich habe gelernt, wie man mit Try-Catch-finally-Blöcken mit Ausnahmen umgeht. Lassen Sie uns hier die Arten von Ausnahmen ansprechen und lernen, wann sie tatsächlich verwendet werden sollen.
** Deaktivierte Ausnahme ** Ausnahmen, bei denen der Compiler nicht prüft, ob die Ausnahmebehandlung beschrieben ist (Beschreibung der Ausnahmeverarbeitung ist optional) Das Ziel ist die RuntimeException-Klasse und darunter.
Da die Ausnahmebehandlung optional ist, gibt es kein Problem mit der Java-Syntax selbst und sie kann kompiliert werden.
Main.java
class Main {
public static void main(String[] args) {
int[] num = {10, 20, 30};
System.out.println(num[3]); //Es wird versucht, außerhalb des Bereichs des num-Arrays auszugeben
}
}
Wenn Sie die obige Datei kompilieren und ausführen
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3
at Main.main(Main9.java:71)
Ich erhalte eine Ausnahme für ArrayIndexOutOfBoundsException, eine Unterklasse von RuntimeException. Die Ausnahme ist, wenn der Index (Index) des Arrays außerhalb des Bereichs liegt.
Normalerweise wird keine Ausnahmebehandlung durchgeführt, da solche Ausnahmen durch die Programmiererprüfung zum Zeitpunkt der Codierung verhindert werden können. (Wenn Sie die Ausnahmebehandlung an allen Stellen schreiben, an denen wahrscheinlich Ausnahmen auftreten, ist der Code kompliziert.)
Aber vorerst werde ich es in eine Try-Catch-Erklärung aufnehmen.
Main.java
class Main {
public static void main(String[] args) {
String[] fruits = {"Apfel", "Banane", "Mandarine"};
int[] num = {10, 20, 30};
try {
System.out.println(num[3]); //Es wird versucht, außerhalb des Bereichs des num-Arrays auszugeben
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("Ausnahme aufgetreten");
}
}
}
Wenn Sie es kompilieren und ausführen
Ausnahme aufgetreten
Die Verarbeitung in der catch-Anweisung wird ausgeführt.
** Inspektionsausnahme ** Eine Ausnahme, bei der der Compiler prüft, ob die Ausnahmebehandlung beschrieben wurde (Ausnahmebehandlung muss beschrieben werden). Andere Klassen als RuntimeException werden als Ziel ausgewählt.
Eine Beschreibung der Ausnahmebehandlung ist obligatorisch, andernfalls tritt beim Kompilieren ein Fehler auf. Lass uns einen Blick darauf werfen.
Wenn es keine Beschreibung der Ausnahmebehandlung gibt.
Main.java
import java.io.File;
import java.io.FileReader;
import java.io.BufferedReader;
import java.io.IOException;
class Main {
public static void main(String[] args) {
//Geben Sie den Dateipfad an
File file = new File("test.text");
//Holen Sie sich eine Zeile in den Inhalt der Datei
FileReader fileReader = new FileReader(file);
BufferedReader bufferedReader = new BufferedReader(fileReader);
String str = bufferedReader.readLine();
//Drehen Sie die Schleife und zeigen Sie sie zeilenweise an
while(str != null){
System.out.println(str);
str = bufferedReader.readLine();
}
//Schließen Sie schließlich die Datei, um Ressourcen freizugeben
bufferedReader.close();
}
}
Wenn Sie dies kompilieren,
Main.java:13:Error:Die Ausnahme FileNotFoundException wird nicht gemeldet. Muss gefangen genommen oder zum Werfen erklärt werden
FileReader fileReader = new FileReader(file);
^
Main.java:15:Error:Ausnahme IOException wird nicht gemeldet. Muss gefangen genommen oder zum Werfen erklärt werden
String str = bufferedReader.readLine();
^
Main.java:20:Error:Ausnahme IOException wird nicht gemeldet. Muss gefangen genommen oder zum Werfen erklärt werden
str = bufferedReader.readLine();
^
Main.java:24:Error:Ausnahme IOException wird nicht gemeldet. Muss gefangen genommen oder zum Werfen erklärt werden
bufferedReader.close();
^
4 Fehler
Wenn Sie kompilieren, ohne die Ausnahmebehandlung zu beschreiben, tritt ein Kompilierungsfehler auf.
Fügen Sie es als Nächstes in eine try-catch-Anweisung ein.
Main.java
import java.io.File;
import java.io.FileReader;
import java.io.BufferedReader;
import java.io.IOException;
class Main {
public static void main(String[] args) {
// try-Wenn die Ausnahmebehandlung von catch beschrieben wird
try {
//Geben Sie den Dateipfad an
File file = new File("test.text");
//Holen Sie sich eine Zeile in den Inhalt der Datei
FileReader fileReader = new FileReader(file);
BufferedReader bufferedReader = new BufferedReader(fileReader);
String str = bufferedReader.readLine();
//Drehen Sie die Schleife und zeigen Sie sie zeilenweise an
while(str != null){
System.out.println(str);
str = bufferedReader.readLine();
}
//Schließen Sie schließlich die Datei, um Ressourcen freizugeben
bufferedReader.close();
} catch (IOException e) {
System.out.println("Ausnahme aufgetreten");
}
}
}
Beim Kompilieren wird kein Kompilierungsfehler angezeigt. Wenn du rennst
AIUEO
Kakikukeko
SA Shi Su Se So.
Und der Inhalt der Datei test.txt wird ausgegeben.
Dieses Mal mache ich absichtlich einen Fehler im Pfadspezifikationsteil der Datei.
Main.java
import java.io.File;
import java.io.FileReader;
import java.io.BufferedReader;
import java.io.IOException;
class Main {
public static void main(String[] args) {
// try-Wenn die Ausnahmebehandlung von catch beschrieben wird
try {
//Geben Sie den Dateipfad an
File file = new File("aaaaaaaaa.text"); //Geben Sie eine Textdatei an, die nicht vorhanden ist
//Holen Sie sich eine Zeile in den Inhalt der Datei
FileReader fileReader = new FileReader(file);
BufferedReader bufferedReader = new BufferedReader(fileReader);
String str = bufferedReader.readLine();
//Drehen Sie die Schleife und zeigen Sie sie zeilenweise an
while(str != null){
System.out.println(str);
str = bufferedReader.readLine();
}
//Schließen Sie schließlich die Datei, um Ressourcen freizugeben
bufferedReader.close();
} catch (IOException e) {
System.out.println("Ausnahme aufgetreten");
}
}
}
Sie können kompilieren. Wenn ich es laufen lasse,
Ausnahme aufgetreten
Wurde ausgegeben. Eine Ausnahme ist aufgetreten und die Verarbeitung in der catch-Anweisung wird ausgeführt.
Bei anderen Klassen als RuntimeException, wie oben beschrieben, sollten Sie sich bewusst sein, dass es Fälle gibt, in denen ein Kompilierungsfehler auftritt, wenn die Ausnahmebehandlung nicht beschrieben wird.
②throws
Zusätzlich zur Ausnahmebehandlung für try-catch-block-Blöcke können Sie auch das Schlüsselwort throw verwenden, um Ausnahmen zu behandeln.
Dieses Schlüsselwort wird verwendet, wenn eine Methode definiert wird, die eine Ausnahme auslösen kann. Durch Angabe von "löst den Namen der auftretenden Ausnahmeklasse aus" Der Mechanismus ist so, dass die Ausnahme an den Aufrufer dieser Methode weitergeleitet wird.
Insbesondere werde ich versuchen, daraus eine Methode zu machen, die auf dem obigen Beispielcode basiert.
Definieren Sie die Operation zum Lesen und Ausgeben der Datei als Methode in einer anderen Klasse. Verwenden Sie beim Definieren dieser Methode das Schlüsselwort "throw".
GetText.java
import java.io.File;
import java.io.FileReader;
import java.io.BufferedReader;
import java.io.IOException;
class GetText {
//Die durch throw angegebene Methode löst die Ausnahme für den Aufrufer aus
public void getText() throws IOException {
//Geben Sie den Dateipfad an
File file = new File("aaaaaaaaa.text"); //Geben Sie eine Textdatei an, die nicht vorhanden ist
//Holen Sie sich eine Zeile in den Inhalt der Datei
FileReader fileReader = new FileReader(file);
BufferedReader bufferedReader = new BufferedReader(fileReader);
String str = bufferedReader.readLine();
//Drehen Sie die Schleife und zeigen Sie sie zeilenweise an
while(str != null){
System.out.println(str);
str = bufferedReader.readLine();
}
//Schließen Sie schließlich die Datei, um Ressourcen freizugeben
bufferedReader.close();
}
}
Wenn beim Aufrufen der getText-Methode in Main.java eine Ausnahme auftritt, wird die hier beschriebene catch-Anweisung verarbeitet.
Main.java
import java.io.IOException;
class Main {
public static void main(String[] args) {
//Zum Zeitpunkt der Würfe
try {
GetText gt = new GetText();
//Rufen Sie die getText-Methode mit dem Schlüsselwort throw auf
gt.getText();
//Fangen Sie die Ausnahme
} catch (IOException e) {
System.out.println("Ausnahme aufgetreten");
}
}
}
Wenn Sie diese Datei kompilieren, können Sie sie kompilieren. Lass es einfach laufen
Ausnahme aufgetreten
Ich habe eine Ausnahme für den Zugriff auf eine Datei erhalten, die in getText nicht vorhanden ist. Es gibt jedoch keine Beschreibung der try-catch-Anweisung in der Verarbeitungsmethode.
Durch Deklarieren des Ausnahmeklassennamens, der beim Definieren der Methode "Würfe" verursacht, Beim Aufrufer dieser Methode wird in der catch-Anweisung eine Ausnahme ausgelöst (ausgelöst), und die Ausnahmebehandlung wird durchgeführt.
Versuchen Sie übrigens, die try-catch-Anweisung beim Methodenaufrufer zu entfernen.
Main.java
import java.io.IOException;
class Main {
public static void main(String[] args) {
//Versuchen Sie es zum Zeitpunkt der Würfe-Wenn die catch-Anweisung gelöscht wird
GetText gt = new GetText();
gt.getText();
}
}
Wenn Sie kompilieren ...
Main.java:16:Error:Ausnahme IOException wird nicht gemeldet. Muss gefangen genommen oder zum Werfen erklärt werden
gt.getText();
^
1 Fehler
Ich erhalte einen Kompilierungsfehler. Beachten Sie, dass selbst wenn Sie eine Methode definieren, die das Schlüsselwort throw verwendet, ein Kompilierungsfehler auftritt, wenn der Aufrufer der Methode die Ausnahmebehandlung nicht mithilfe der try-catch-Anweisung beschreibt.
③throw
Sie können eine Ausnahme in Ihrem Programm explizit mit dem Schlüsselwort "throw" auslösen. Der Unterschied zu Würfen besteht darin, dass Würfe beim Auftreten einer Ausnahme abfangen, während Würfe explizit eine Ausnahme abfangen. Daher können Sie absichtlich selbst eine Ausnahme auslösen.
Main.java
class Main {
public static void main(String[] args) {
int[] num = {10, 20, 30};
try {
for(int i = 0; i < num.length; i++) {
System.out.println(num[i]);
if(num[i] < 20) {
//Eine Ausnahme explizit auslösen
throw new Exception();
}
}
} catch (Exception e) {
System.out.println("Ausnahme aufgetreten");
}
}
}
Wenn Sie mit dem obigen Code kompilieren und ausführen,
10
Ausnahme aufgetreten
Bei der Ausgabe von num-Arrays nacheinander wird explizit eine Ausnahme ausgelöst, wenn sie 20 überschreitet. Infolgedessen wird beim Versuch, die zweiten 20 auszugeben, die Verarbeitung innerhalb des Catch ausgeführt.
Das Schlüsselwort throw unterscheidet sich vom Schlüsselwort throw darin, dass Sie überall eine Ausnahme auslösen können.
Wenn Sie in der Java-Grammatik keinen Fehler machen, können Sie ihn kompilieren. Ich habe etwas über die Ausnahmebehandlung für den Fall gelernt, dass der Prozess während der Ausführung des Programms stoppt.
Ich möchte vorsichtig sein, da es einige geprüfte Ausnahmen gibt, die die Beschreibung der Ausnahmebehandlung in try-catch erfordern.
Ich habe nur oberflächliches Wissen, deshalb möchte ich tiefer graben und verstehen, dass es in der Praxis verwendet werden kann.
Recommended Posts