Java -Wurf: Ausnahmewurf
Das Programm kann die Wurfanweisung verwenden, um klare Ausnahmen zu machen. Die übliche Form einer Wurfanweisung lautet wie folgt:
ThrowableInstance werfen;
Hier muss ThrowableInstance ein Objekt des Throwable -Klassentyps oder der Throwable Subclass -Typ sein. Einfache Typen wie INT oder CHAR und nicht umlaufbare Klassen wie Zeichenfolge oder Objekt können nicht als Ausnahmen verwendet werden. Es gibt zwei Möglichkeiten, um Thrombo -Objekten zu erhalten: Verwenden Sie Parameter in der Fangklausel oder erstellen Sie sie mit dem neuen Bediener.
Die Programmausführung stoppt unmittelbar nach der Wurfanweisung. Mit dem eng miteinander verbundenen Try-Block wird prüfen, ob eine Catch-Anweisung enthält, die mit dem Ausnahmetyp übereinstimmt. Wenn ein passender Block gefunden wird, wendet sich die Kontrolle an die Anweisung. Wenn kein passender Fangblock gefunden wird, unterbricht der Standard -Ausnahme -Handler die Ausführung des Programms und druckt die Stapelverfolgung.
Das Folgende ist ein Beispielprogramm, das Ausnahmen erstellt und auswirft.
// Throw.class Throwdemo {statische void Demoproc () {try {town nullPointerexception ("Demo"); / / rethrow die Ausnahme}} öffentliche statische void main (String args []) {try {DemoProc (); Das Programm hat zwei Möglichkeiten, den gleichen Fehler zu bewältigen. Zuerst stellt Main () eine Ausnahmeregelung ein und ruft dann Demoproc () auf. Die Demoproc () -Methode richtet dann eine weitere Beziehung zur Ausnahme von Ausnahme und wirft sofort eine neue NullPointerexception -Instanz aus, die in der nächsten Zeile erfasst wird. Die Ausnahme wird dann erneut geworfen. Hier ist das Ausgabeergebnis:
In der Demoproc.Recaught gefangen: java.lang.nullpointerexception: Demo
Das Programm erläutert auch, wie Standard -Ausnahmebobjekte in Java erstellt werden und der folgenden Zeile besondere Aufmerksamkeit schenkt:
neue nullpointerexception ("Demo") werfen;
Hier wird neu verwendet, um eine NullPointerexception -Instanz zu konstruieren. Alle Java-integrierten Laufzeitausnahmen haben zwei Konstruktoren: Man hat keine Parameter und einer einen String-Parameter. Wenn die zweite Form verwendet wird, gibt der Parameter die Zeichenfolge an, die die Ausnahme beschreibt. Wenn das Objekt als Parameter für print () oder println () verwendet wird, wird die Zeichenfolge angezeigt. Dies kann auch erreicht werden, indem GetMessage () aufgerufen wird, was durch Throwable definiert ist.
Java löscht Klausel <br /> Wenn eine Methode eine Ausnahme verursachen kann, sie jedoch nicht behandelt, muss sie dieses Verhalten angeben, damit sich der Anrufer der Methode ohne Ausnahme schützen kann. Dazu können Sie eine Würfe -Klausel in die Methodeerklärung einbeziehen. In A Throws -Klausel werden alle Ausnahmetypen aufgeführt, die eine Methode werfen kann. Dies ist für alle Ausnahmen von Typen mit Ausnahme von Fehler oder RunTimeException und deren Unterklassen erforderlich. Alle anderen Arten von Ausnahmen, die eine Methode werfen kann, müssen in der Throw -Klausel deklariert werden. Andernfalls führt dies zu einem Kompilierungsfehler.
Hier finden Sie eine gemeinsame Form einer Methodenerklärung, die eine Würfe -Klausel enthält:
Typ-Methodenname (Parameterlist) löst eine Ausnahmeliste {// Methodenkörper} ausHier ist die Ausnahmeliste eine von der Kommission segmentierte Ausnahmeliste, die die Methode werfen kann.
Hier ist ein falsches Beispiel. Dieses Beispiel versucht eine Ausnahme, die es nicht fangen kann. Da das Programm keine Throws -Klausel angibt, um die Tatsache zu erklären, wird das Programm nicht kompilieren.
// Dieses Programm enthält einen Fehler und wird nicht kompilieren. String args []) {throwOne (); Um das Programm zu kompilieren, müssen zwei Orte geändert werden. Zunächst müssen Sie Throwone () deklarieren, um eine illegale Ausnahme auszusetzen. Zweitens muss Main () eine Versuch/Catch -Erklärung definieren, um die Ausnahme zu erfassen. Die richtigen Beispiele sind wie folgt:
// Dies ist jetzt korrekt. ) {try {throwOne (); Hier sind die Ausgabeergebnisse des Beispiels:
Inside Throwonecaught Java.lang.IillegalaccessException: Demo