Vorteile von Ausnahmen in Java Programmiersprache
Eine Ausnahme ist ein Fall, der während der
Durchführung eines Programms auftritt, das den normalen Fluß der
Anweisungen des Programms stört.
Vorteil 1: Trennen, Code Störung-Anfassend "vom
regelmäßigen" Code
Ausnahmen liefern die Mittel, die Details von was
zu trennen zu tun, wenn etwas aus dem Üblichen heraus von der MAIN
LOGIC eines Programms geschieht. In der traditionellen
Programmierung führen Fehlererkennung, der Bericht und die Behandlung
häufig zu verwirrenden Isolationsschlauchcode. Z.B. betrachten
Sie die Pseudocodemethode hier, die eine gesamte Akte in Gedächtnis
liest:
readFile {
öffnen Sie die Akte;
stellen Sie seine Größe fest;
teilen Sie daß viel Gedächtnis zu;
lesen Sie die Akte in Gedächtnis;
schließen Sie die Akte;
}
Am ersten flüchtigen Blick scheint diese Funktion
genug einfach, aber sie ignoriert alle folgenden möglichen
Störungen:
• Was geschieht, wenn die Akte nicht geöffnet werden kann?
• Was geschieht, wenn die Länge der Akte nicht festgestellt
werden kann?
• Was geschieht, wenn genügend Gedächtnis nicht zugeteilt werden
kann?
• Was geschieht, wenn gelesen ausfällt?
• Was geschieht, wenn die Akte nicht geschlossen sein kann?
Um solche Fälle anzufassen, muß die readFile Funktion
mehr Code haben zum der Fehlererkennung zu tun und berichten und
anfassen. Wie hier ist ein Beispiel von, was die Funktion
aussehen konnte:
errorCodeType readFile {
initialisieren Sie errorCode = 0;
öffnen Sie die Akte;
wenn (theFileIsOpen) {
stellen Sie die Länge der Akte fest;
wenn (gotTheFileLength) {
teilen Sie daß viel Gedächtnis zu;
wenn (gotEnoughMemory) {
lesen Sie die Akte in Gedächtnis;
wenn (readFailed) {
errorCode = -1;
}
} sonst {
errorCode = -2;
}
} sonst {
errorCode = -3;
}
schließen Sie die Akte;
wenn (theFileDidntClose && errorCode == 0) {
errorCode = -4;
} sonst {
errorCode = errorCode und -4;
}
} sonst {
errorCode = -5;
}
RückholerrorCode;
}
Es gibt soviel die Fehlererkennung und berichtet,
und hier geht zurück, daß die ursprünglichen sieben Linien des
Codes in der Unordnung verloren sind. Schlechter schon, ist der
logische Fluß des Codes auch verloren worden und ihn schwierig so
gebildet zu erklären, ob der Code die rechte Sache tut: Wird
die Akte wirklich geschlossen gewesen, wenn die Funktion genügend
Gedächtnis zuteilen nicht kann? Es ist sogar schwieriger,
sicherzugehen, daß der Code fortfährt, die rechte Sache zu tun, wenn
Sie die Methode drei Monate nach Schreiben es ändern. Viele
Programmierer lösen dieses Problem, indem sie einfach iterrors
ignorieren, werden berichtet, wenn ihre Programme zusammenstoßen.
Ausnahmen ermöglichen Ihnen, den Hauptfluß Ihres Codes
zu schreiben und die Sonderfälle anderwohin zu beschäftigen.
Wenn die readFile Funktion Ausnahmen anstelle von den
traditionellen Störung-Management Techniken verwendete, würde sie
mehr wie das folgende schauen:
readFile {
Versuch {
öffnen Sie die Akte;
stellen Sie seine Größe fest;
teilen Sie daß viel Gedächtnis zu;
lesen Sie die Akte in Gedächtnis;
schließen Sie die Akte;
} Verriegelung (fileOpenFailed) {
DoSomething;
} Verriegelung (sizeDeterminationFailed) {
DoSomething;
} Verriegelung (memoryAllocationFailed) {
DoSomething;
} Verriegelung (readFailed) {
DoSomething;
} Verriegelung (fileCloseFailed) {
DoSomething;
}
}
Merken Sie, daß Ausnahmen Ihnen nicht die
Bemühung des Erledigens der Arbeit des Ermittelns, des Berichtens und
der Behandlung über von von Störungen ersparen, aber sie helfen
Ihnen, die Arbeit effektiv zu organisieren.
Vorteil 2: Fortpflanzen von von Störungen herauf
den Anruf-Stapel
Ein zweiter Vorteil von Ausnahmen ist die
Fähigkeit, die Störung fortzupflanzen, die herauf den Anrufstapel
von Methoden berichtet. Nehmen Sie an, daß die readFile Methode
die vierte Methode in einer Reihe von den genisteten Methode Anrufen
ist, die durch das Hauptprogramm gebildet werden: method1
benennt method2, das method3 benennt, das schließlich readFile
benennt:
method1 {
Anruf method2;
}
method2 {
Anruf method3;
}
method3 {
Anruf readFile;
}
Nehmen Sie auch an, daß method1 die einzige
Methode ist, die an den Störungen interessiert wird, die innerhalb
readFile. der traditionellen Störung-Mitteilung Technikkraft method2
und method3 auftreten konnten, zum der Störung Codes fortzupflanzen,
die durch readFile hohes der Anrufstapel zurückgebracht wurden, bis
die Störung Codes schließlich method1the nur Methode erreichen, die
an ihnen interessiert ist:
method1 {
errorCodeType Störung;
Störung = Anruf method2;
wenn (Störung)
DoErrorProcessing;
sonst
fahren Sie fort;
}
errorCodeType method2 {
errorCodeType Störung;
Störung = Anruf method3;
wenn (Störung)
Rückholstörung;
sonst
fahren Sie fort;
}
errorCodeType method3 {
errorCodeType Störung;
Störung = Anruf readFile;
wenn (Störung)
Rückholstörung;
sonst
fahren Sie fort;
}
Rufen Sie zurück, daß das Java Laufzeitklima
rückwärts durch den Anrufstapel sucht, um alle mögliche Methoden zu
finden, die interessiert sind, an, eine bestimmte Ausnahme anzufassen.
Eine Methode kann alle mögliche Ausnahmen ducken, die innerhalb
sie geworfen werden, dadurch sieläßt sieläßt eine Methode weit
herauf den Anrufstapel sich ihn verfangen. Folglich nur die
Methoden, die für Störungen sich interessieren, müssen um das
Ermitteln von von Störungen sich sorgen:
method1 {
Versuch {
Anruf method2;
} Verriegelung (Ausnahme e) {
DoErrorProcessing;
}
}
method2 wirft Ausnahme {
Anruf method3;
}
method3 wirft Ausnahme {
Anruf readFile;
}
Jedoch während der Pseudocode darstellt,
erfordert das Ducken einer Ausnahme etwas Bemühung von seiten der
Zwischenhändlermethoden. Alle mögliche überprüften
Ausnahmen, die innerhalb einer Methode geworfen werden können,
müssen in seiner THRowsklausel spezifiziert werden.
Vorteil 3: Gruppierung und Fehlerarten
unterscheiden
Weil alle Ausnahmen, die innerhalb eines
Programms geworfen werden, Gegenstände sind, ist die Gruppierung oder
das Kategorisieren von Ausnahmen ein natürliches Resultat der
Kategorie Hierarchie. Ein Beispiel einer Gruppe in Verbindung
stehender Ausnahmekategorien in der Java Plattform sind die definiert
in java.ioIOException und in seinen Nachkommen. IOException ist
das allgemeinste und stellt irgendeine Art Störung dar, die auftreten
kann, wenn es I/O durchführt. Seine Nachkommen stellen
spezifischere Störungen dar. Z.B. bedeutet
FileNotFoundException, daß eine Akte nicht auf Scheibe sich befinden
könnte.
Eine Methode kann spezifische Zufuhren schreiben, die eine
sehr spezifische Ausnahme anfassen können. Die
FileNotFoundException Kategorie hat keine Nachkommen, also kann die
folgende Zufuhr nur eine Art Ausnahme anfassen:
Verriegelung (FileNotFoundException e) {
...
}
Eine Methode kann eine Ausnahme sich verfangen,
die auf seiner Gruppe oder allgemeinen Art, indem sie irgendwelche der
superclasses der Ausnahme in der Verriegelung Aussage basiert
spezifiziert. Z.B. um sich alle I/O Ausnahmen, unabhängig davon
ihre spezifische Art zu verfangen, spezifiziert eine Ausnahmezufuhr
ein IOException Argument:
Verriegelung (IOException e) {
...
}
Diese ZufuhrIST in der Lage, sich alle I/O
Ausnahmen, einschließlich FileNotFoundException, EOFException zu
verfangen und so weiter. Sie können finden Details über, was
auftrat, indem es das Argument fragte, das der Ausnahmezufuhr geführt
wird. Z.B. verwenden Sie das folgende, um das Kellerprotokoll zu
drucken:
verfangen Sie sich (IOException e) {
e.printStackTrace(); //ausgegeben geht zu
System.err.
e.printStackTrace(System.out); //schicken Sie Spur zum
stdout.
}
Sie konnten eine Ausnahmezufuhr sogar aufstellen,
die jede mögliche Ausnahme mit der Zufuhr hier anfaßt:
verfangen Sie sich (Ausnahme e) {// A (auch) allgemeine
Ausnahmezufuhr
...
}
Die Ausnahmekategorie ist nah an der Oberseite
der THRowable Kategorie Hierarchie. Folglich verfängt sich
diese Zufuhr viele andere Ausnahmen zusätzlich zu denen, die die
Zufuhr sich verfangen soll. Sie können Ausnahmen anfassen
wünschen auf diese Weise, wenn alle Sie Ihr Programm tun wünschen,
z.B. Druck aus einer Fehlermeldung für den Benutzer ist und dann
herausnimmt.
In den meisten Situationen jedoch wünschen Sie
Ausnahmezufuhren so spezifisch sein, wie möglich. Der Grund
ist, daß die erste Sache, die ein Zufuhrmuß, feststellen ist, welche
Art der Ausnahme auftrat, bevor sie auf der besten Wiederaufnahme
Strategie entscheiden kann. In Wirklichkeit indem er sich nicht
spezifische Störungen verfängt, muß die Zufuhr jede mögliche
Möglichkeit unterbringen. Ausnahmezufuhren, die zu allgemeine
Dose sind, bilden Code fehleranfälliger, indem sie Ausnahmen sich
verfangen und anfassen, die nicht vom Programmierer vorweggenommen
wurden und für, welches der Zufuhr nicht beabsichtigt wurde.
Wie gemerkt, können Sie Gruppen Ausnahmen verursachen und
Ausnahmen auf eine allgemeine Art und Weise anfassen, oder Sie können
die spezifische Ausnahmeart benutzen, um Ausnahmen zu unterscheiden
und Ausnahmen auf eine genaue Art und Weise anzufassen.
dieses ist ein Artikel, der von Clain Brand hinzugefügt
wird
Verzicht: Unsere Web site ist
nicht zu der Information verantwortlich, die durch diesen Artikel
enthalten wird. Dieser Artikel reflektiert keineswegs die
Ansichten, die Meinungen, die Gedanken oder den Glauben des
Artikelverzeichnisstabes.
Übersetzung Nachricht: Der Artikel
"Vorteile von Ausnahmen in Java Programmiersprache" wurde mit einem
automatisierten Übersetzungsdienst übersetzt. Wir
entschuldigen herzlichst uns für alle mögliche Übersetzung
Störungen, die auftraten. Danke für das Verstehen.