Ausnahmebehandlung: Wurf, Würfe und Throwable
-
30-09-2019 - |
Frage
Kann einer von euch erklären, was sind die Unterschiede zwischen throw
, throws
und Throwable
und zu verwenden, wenn das?
Lösung
-
throws
. Wird verwendet, wenn Methoden zu schreiben, zu erklären, dass das fragliche Verfahren wirft die angegebene (geprüft) AusnahmeIm Gegensatz zu dem geprüften Ausnahmen, Laufzeit Ausnahmen (Nullpointerexceptions usw.) kann, ohne dass das Verfahren declare
throws NullPointerException
geworfen werden. -
throw
: Anweisung, um tatsächlich die Ausnahme zu werfen. (Oder genauer gesagt, die Throwable ).Das Schlüsselwort throw wird durch einen Verweis auf eine
Throwable
(in der Regel eine Ausnahme) gefolgt.
Beispiel:
-
Throwable
. Eine Klasse, die Sie verlängern müssen Ihre eigenen, benutzerdefinierten zu erstellen, throwable
Beispiel:
eingebenAndere Tipps
-
throw
. Anweisungsobjektt
zu werfen, wot instanceof java.lang.Throwable
wahr sein muss -
throws
: a. Methode Signatur geprüfte Ausnahmen zu spezifizieren nach dieser Methodethrow
n -
java.lang.Throwable
. Der Muttertyp aller Objekte, die (und gefangen) geworfen werden können
Das ist wirklich leicht zu verstehen.
Das java.lang.Throwable :
Die
Throwable
Klasse ist die übergeordnete Klasse aller Fehler und Ausnahmen in der Programmiersprache Java. Nur Objekte, die Instanzen hierfür sind Klasse (oder einer ihrer Unterklassen) sind durch die Java Virtual Machine geworfen oder kann durch die Java geworfen werdenthrow
Aussage. In ähnlicher Weise nur diese Klasse oder eine ihre Unterklassen kann das Argument Geben Sie in einercatch
Klausel. Mehr
Das Schlüsselwort wirft in Methodendeklaration verwendet wird, dies angeben, welche Art von Ausnahme [Throwable Klasse] wir aus diesem Verfahren erwarten können.
Das Schlüsselwort throw verwendet wird, um ein Objekt zu werfen, die Instanz der Klasse Throwable ist.
Lest sehen einige Beispiele:
Wir schaffen sie selbst eine Ausnahmeklasse
public class MyException super Exception {
}
Das schaffen wir eine Methode, die ein Objekt aus unserer Ausnahmeklasse erstellen und wirft es Schlüsselwort mit throw .
private void throwMeAException() throws MyException //We inform that this method throws an exception of MyException class
{
Exception e = new MyException (); //We create an exception
if(true) {
throw e; //We throw an exception
}
}
Wenn wir gehen Methode throwMeAException()
verwenden, werden wir in bestimmten Weise kümmern sich um sie gezwungen, weil wir die Informationen haben, dass es etwas wirft, in diesem Fall haben wir drei Optionen.
Erste Option ist mit Block versuchen und fangen die Ausnahme zu behandeln:
private void catchException() {
try {
throwMeAException();
}
catch(MyException e) {
// Here we can serve only those exception that are instance of MyException
}
}
Zweite Option ist die Ausnahme zu übergeben
private void passException() throws MyException {
throwMeAException(); // we call the method but as we throws same exception we don't need try catch block.
}
Dritte Optionen sind zu fangen und wieder werfen die Ausnahme
private void catchException() throws Exception {
try {
throwMeAException();
}
catch(Exception e) {
throw e;
}
}
wieder aufnehmen, wenn Sie benötigen eine Aktion stoppen können Sie die Exception werfen, die zurück gehen werden, bis nicht-Server durch einen try-catch-Block. Überall dort, wo Sie Methode verwenden, die eine Ausnahme auslöst, sollten Sie es von Try-Catch-Block behandeln oder die Erklärungen auf Ihre Methoden hinzufügen.
Die Ausnahme von dieser Regel ist java.lang.RuntimeException
diejenigen haben nicht erklärt werden. Dies ist eine andere Geschichte als den Aspekt der Ausnahme Gebrauch.
werfen - es verwendet wird, eine Exception.The throw-Anweisung zu werfen erfordert ein einziges Argument: ein throwable Klassenobjekt
wirft - Dies wird verwendet, gibt an, dass die Methode Ausnahme auslösen kann
Throwable - Dies ist die übergeordnete Klasse aller Fehler und Ausnahmen in der Programmiersprache Java. Sie können Objekte werfen nur, dass stammen aus der Throwable Klasse. throwable enthält eine Momentaufnahme des Ausführungsstapels ihres Gewinde zum Zeitpunkt es erstellt wurde
Throw
ist für das Werfen Ausnahme, throws
verwendet (wenn ich richtig geraten) verwendet diese Methode, um anzuzeigen, können bestimmte Ausnahme auslösen und die Throwable
Klasse ist die Super aller Fehler und Ausnahmen in der Java
Wurf:
verwendet wird, um tatsächlich die Ausnahme zu werfen, während wirft, ist deklarative für das Verfahren. Sie sind nicht austauschbar.
throw new MyException("Exception!);
Löst aus:
Es handelt sich hierbei verwendet werden, wenn Sie nicht den Versuch catch-Anweisung in Ihrem Code verwenden, aber Sie wissen, dass diese besondere Klasse der Lage ist, so zu werfen und so Ausnahme (nur geprüfte Ausnahmen). Dann werden sie sie an geeigneter Stelle nicht in Ihrem Code und die Ausnahme an den Aufrufer der Methode geworfen verwenden try catch-Block, sondern schreibt mit der throw-Klausel und wird von ihm behandelt. Auch das wirft Schlüsselwort verwendet wird, wenn die Funktion eine geprüfte Ausnahme auslösen kann.
public void myMethod(int param) throws MyException
Es gibt 2 Arten von Ausnahmen:
Runtime Ausnahmen (ungeprüft) : zB. Nullpointer, Classcast, ..
Checked Ausnahmen: zB. FileNotFoundException, CloneNotSupportedException, ..
Runtime Ausnahmen sind Ausnahmen, die während der Laufzeit und der Entwickler auftreten sollte nicht versuchen, ihn zu fangen oder zu stoppen. Sie Code schreiben, sie zu vermeiden oder einen Befehl throw , wenn die Fehlerkriterien erfüllt ist. Wir verwenden in der Methode Körper werfen.
public Rational(int num, int denom){
if(denom <= 0) {
throw new IllegalArgumentException("Denominator must be positive");
}
this.num=num;
this.denom=denom;
}
Jedoch für geprüfte Ausnahmen, die JVM erwartet Sie es zu handhaben und wird Compiler-Fehler geben, wenn nicht behandelt, so dass Sie erklären, dass sie diese Art von Ausnahme auslöst, wie unten in der Methode clone () zu sehen.
Class Employee{
public Employee clone() throws CloneNotSupportedException{
Employee copy = (Employee)super.clone();
copy.hireDate = (Date)hireDate.clone();
return copy;
}
}
Die gleiche Antwort wie oben, aber mit copy-paste Vergnügen :
public class GsonBuilderHelper {
// THROWS: method throws the specified (checked) exception
public static Object registerAndRun(String json) throws Exception {
// registering of the NaturalDeserializer
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Object.class, new NaturalDeserializer());
Gson gson = gsonBuilder.create();
Object natural = null;
try {
// calling the NaturalDeserializer
natural = gson.fromJson(json, Object.class);
} catch (Exception e) {
// json formatting exception mainly
Log.d("GsonBuilderHelper", "registerAndRun(json) error: " + e.toString());
throw new Exception(e); // <---- THROW: instance of class Throwable.
}
return natural;
}
}