wake-up-neo.com

Ausnahmebehandlung: Werfen, Werfen und Werfen

Kann einer von Ihnen erklären, was die Unterschiede zwischen throw, throws und Throwable sind und wann welche verwendet werden?

52
Sumithra
  • throws: Wird beim Schreiben von Methoden verwendet, um zu erklären, dass die fragliche Methode die angegebene (geprüfte) Ausnahme auslöst.

    Im Gegensatz zu geprüften Ausnahmen können Laufzeitausnahmen (NullPointerExceptions usw.) ausgelöst werden, ohne dass die Methode throws NullPointerException deklariert wird.

  • throw: Anweisung zum Auslösen der Ausnahme. (Oder genauer: Throwable).

    Auf das Throw-Schlüsselwort folgt eine Referenz auf eine Throwable (normalerweise eine Ausnahme).

Beispiel:

enter image description here


  • Throwable: Eine Klasse, die Sie erweitern müssen, um Ihre eigenen benutzerdefinierten Wurfobjekte zu erstellen.

Beispiel:

 enter image description here


83
aioobe
  • throw: Anweisung zum Auslösen des Objekts t, wobei t instanceof Java.lang.Throwable wahr sein muss.
  • throws: Ein Methodensignatur-Token zur Angabe der geprüften Ausnahmen thrown dieser Methode.
  • Java.lang.Throwable: Der übergeordnete Typ aller Objekte, die geworfen werden können (und abgefangen werden können).

Siehe hier für ein Tutorial zur Verwendung von Ausnahmen.

9
oksayt

Das ist wirklich leicht zu verstehen. 

Die Java.lang.Throwable:

Die Throwable-Klasse ist die Oberklasse aller Fehler und Ausnahmen in der Java-Sprache. Nur Objekte, die Instanzen von diesem sind Klasse (oder eine ihrer Unterklassen) sind geworfen von der Java Virtual Machine oder kann von Java geworfen werden throw Anweisung . Ebenso nur diese Klasse oder eine von Seine Unterklassen können das Argument .__ sein. Geben Sie eine catch-Klausel ein . Mehr

Das Schlüsselwort throws wird in der Methodendeklaration verwendet. Dies gibt an, welche Art von Ausnahme [Throwable-Klasse] wir von dieser Methode erwarten dürfen. 

Das Schlüsselwort throw wird verwendet, um ein Objekt auszulösen, das eine Instanz der Klasse Throwable ist.


Sehen Sie sich bitte ein Beispiel an:

Wir erstellen uns eine Ausnahmeklasse

public class MyException super Exception {

}

Wir erstellen eine Methode, die ein Objekt aus unserer Ausnahmeklasse erstellt und wirft es mit dem Schlüsselwort 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 die Methode throwMeAException() verwenden, müssen wir uns auf bestimmte Weise darum kümmern, weil wir die Informationen haben, dass sie etwas werfen. In diesem Fall haben wir drei Optionen. 

Die erste Option ist die Verwendung von block try und catch, um die Ausnahme zu behandeln:

private void catchException() {

   try {
     throwMeAException();
   }
   catch(MyException e) {
     // Here we can serve only those exception that are instance of MyException
   }
}

Die zweite Möglichkeit besteht darin, 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.

   }

Die dritte Option besteht darin, die Ausnahme abzufangen und erneut zu werfen

private void catchException() throws Exception  {

   try {
     throwMeAException();
   }
   catch(Exception e) {
      throw e;
   }
}

Wenn Sie eine Aktion abbrechen müssen, können Sie die Exception zurückwerfen, die von einem try-catch-Block auf den Server zurückgesetzt wird. Wo auch immer Sie eine Methode verwenden, die eine Ausnahme auslöst Sie sollten sie mit dem try-catch-Block behandeln oder die Deklarationen zu Ihren Methoden hinzufügen. 

Die Ausnahme von dieser Regel sind Java.lang.RuntimeException, die nicht deklariert werden müssen. Dies ist eine andere Geschichte als Aspekt der Ausnahmebedingungen. 

throw - Wird verwendet, um eine Exception zu werfen. Die throw-Anweisung erfordert ein einziges Argument: ein auswerfbares Klassenobjekt

werfen - Dies wird verwendet, um anzugeben, dass die Methode eine Ausnahme auslösen kann

Throwable - Dies ist die Oberklasse aller Fehler und Ausnahmen in der Java-Sprache. Sie können nur Objekte werfen, die von der Throwable-Klasse stammen. throwable enthält eine Momentaufnahme des Ausführungsstapels seines Threads zum Zeitpunkt der Erstellung

2
Sachin Shanbhag

Werfen :

wird verwendet, um die Exception tatsächlich auszulösen, während Throws für die Methode deklarativ ist. Sie sind nicht austauschbar.

throw new MyException("Exception!);

Würfe:

Dies ist zu verwenden, wenn Sie die try catch -Anweisung nicht in Ihrem Code verwenden, Sie jedoch wissen, dass diese bestimmte Klasse in der Lage ist, Exceptions auszulösen (nur markierte Exceptions). In diesem Fall verwenden Sie nicht try catch block, sondern schreiben die Klausel an geeigneter Stelle in Ihrem Code. Die Ausnahme wird an den Aufrufer der Methode geworfen und von diesem behandelt. Das Schlüsselwort throws wird auch verwendet, wenn die Funktion eine geprüfte Ausnahme auslösen kann.

public void myMethod(int param) throws MyException 
1
speeday125

Throw wird zum Auslösen einer Ausnahme verwendet, throws (wenn ich es richtig vermutet habe) wird verwendet, um anzuzeigen, dass die Methode eine bestimmte Ausnahme auslösen kann, und die Throwable-Klasse ist die Oberklasse aller Fehler und Ausnahmen in Java

Wie wir Ausnahmen werfen

1
DixonD

Es gibt zwei Haupttypen von Ausnahmen: 
Laufzeitausnahmen (nicht markiert) : z. NullPointerException, ClassCastException, .. 
Geprüfte Ausnahmen: zB. FileNotFoundException, CloneNotSupportedException, ..

Laufzeitausnahmen sind Ausnahmen, die zur Laufzeit auftreten, und der Entwickler sollte nicht versuchen, sie abzufangen oder zu stoppen. Sie schreiben nur Code, um sie zu vermeiden, oder geben den Befehl throw aus, wenn die Fehlerkriterien erfüllt sind. Wir verwenden Throw innerhalb des Methodenkörpers.

public Rational(int num, int denom){
if(denom <= 0) {
  throw new IllegalArgumentException("Denominator must be positive");
}
this.num=num;
this.denom=denom;
}

Bei aktivierten Ausnahmen erwartet die JVM jedoch, dass Sie damit umgehen. Wenn sie nicht behandelt wird, gibt sie einen Compiler-Fehler aus. Sie geben also an, dass diese Art von Ausnahme wie in der clone () -Methode angezeigt wird.

Class Employee{
public Employee clone() throws CloneNotSupportedException{
    Employee copy = (Employee)super.clone();
    copy.hireDate = (Date)hireDate.clone();
    return copy;
}
}
0
karto