Heim >Java >javaLernprogramm >Detaillierte Erläuterung des Unterschieds zwischen der Verwendung der Schlüsselwörter „throw' und „throws' in der Java-Ausnahmebehandlung

Detaillierte Erläuterung des Unterschieds zwischen der Verwendung der Schlüsselwörter „throw' und „throws' in der Java-Ausnahmebehandlung

高洛峰
高洛峰Original
2017-01-18 14:50:012131Durchsuche

Auslösen von Ausnahmen
Es gibt drei Formen des Auslösens von Ausnahmen: eine ist das Auslösen, die andere ist das Auslösen, und das System löst automatisch eine Ausnahme aus. Nachfolgend sind die Gemeinsamkeiten und Unterschiede zwischen ihnen aufgeführt.
Das System löst automatisch Ausnahmen aus.
Wenn es logische Fehler, Lehrfehler oder Typkonvertierungsfehler in Programmanweisungen gibt, löst das System automatisch Ausnahmen aus. Zum Beispiel:

public static void main(String[] args) {
    int a = 5, b =0;
    System.out.println(5/b);
    //function();
}

Das System löst automatisch eine ArithmeticException aus:

Exception in thread "main" java.lang.ArithmeticException: / by zero
at test.ExceptionTest.main(ExceptionTest.java:62)

Ein weiteres Beispiel ist

public static void main(String[] args) {
    String s = "abc";
    System.out.println(Double.parseDouble(s));
    //function();
}

Das System löst automatisch eine NumberFormatException aus:

Exception in thread "main" java.lang.NumberFormatException: For input string: "abc"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1224)
at java.lang.Double.parseDouble(Double.java:510)
at test.ExceptionTest.main(ExceptionTest.java:62)

throw
throw ist eine Anweisung, die eine Ausnahme auslöst.
Syntax: throw (Ausnahmeobjekt);
Zum Beispiel:

throw e;

wird im Allgemeinen verwendet, wenn der Programmierer einen bestimmten Typ aktiv auslöst, wenn eine bestimmte Logik im auftritt Programmausnahme. Beispiel:

public static void main(String[] args) {
    String s = "abc";
    if(s.equals("abc")) {
      throw new NumberFormatException();
    } else {
      System.out.println(s);
    }
    //function();
}

löst eine Ausnahme aus:

Exception in thread "main" java.lang.NumberFormatException
at test.ExceptionTest.main(ExceptionTest.java:67)

throws
throws ist eine Anweisung, dass die Methode eine Ausnahme auslösen kann. (Wird beim Deklarieren einer Methode verwendet und zeigt an, dass die Methode möglicherweise eine Ausnahme auslöst)
Syntax: [(Modifikator)](Rückgabewerttyp)(Methodenname)([Parameterliste])[throws(Exception-Klasse)]{ ......}
Zum Beispiel:

public void function() throws Exception{......}

Wenn eine Methode eine Ausnahme auslösen kann, verwenden Sie throws, um die Ausnahme zu deklarieren, die möglicherweise ausgelöst wird, und Überlassen Sie es dann der oberen Ebene, ihr Methodenprogramm zur Verarbeitung aufzurufen. Beispiel:

public static void function() throws NumberFormatException{
    String s = "abc";
    System.out.println(Double.parseDouble(s));
  }
    
  public static void main(String[] args) {
    try {
      function();
    } catch (NumberFormatException e) {
      System.err.println("非数据类型不能转换。");
      //e.printStackTrace();
    }
}

Das Verarbeitungsergebnis ist wie folgt:
Nicht-Datentypen können nicht konvertiert werden.
Vergleich zwischen throw und throws
1. Throws erscheint im Header der Methodenfunktion;
2. Throws stellt eine Möglichkeit von Ausnahmen dar, aber diese Ausnahmen müssen nicht unbedingt auftreten;
3. Beide sind passive Methoden zur Behandlung von Ausnahmen (das Negative bedeutet hier nicht, dass diese Methode nur Ausnahmen auslöst oder möglicherweise auslöst, aber die Ausnahmen werden von der Funktion nicht behandelt, und die Ausnahmen werden tatsächlich ausgelöst). Wird vom Aufruf der oberen Ebene der Funktion verarbeitet.

Gute Programmiergewohnheiten:
1. Wenn Sie ein Programm schreiben, verwenden Sie normalerweise try{...}catch{...}, um den Teil abzufangen, in dem eine Ausnahme auftreten kann, und führen Sie die Verarbeitung aus.
2. Nachdem Sie die Ausnahme mit try{...}catch{...} abgefangen haben, müssen Sie sie in Catch{...} verarbeiten, auch wenn es sich um die einfachste Ausgabeanweisung oder Stack-Eingabe e.printStackTrace handelt ();
3. Wenn Sie Ausnahmen im E/A-Eingabe- und Ausgabestream abfangen, fügen Sie nach try{...}catch{...} unbedingt final{...} hinzu, um die Eingabe in die Ausgabe zu setzen Stream ist geschlossen;
4. Wenn eine bestimmte Ausnahme mithilfe von throw im Funktionskörper ausgelöst wird, ist es am besten, dem Funktionsnamen eine throws-Ausnahmeanweisung hinzuzufügen und diese dann an die übergeordnete Funktion zu übergeben, die sie aufruft zur Bearbeitung.


Beispiel:

wirft E1, E2, E3 und teilt dem Programm lediglich mit, dass diese Methode diese Ausnahmen auslösen darf, und der Aufrufer der Methode muss möglicherweise diese Ausnahmen und diese behandeln Die Ausnahmen E1, E2 und E3 können vom Funktionskörper generiert werden.
throw macht deutlich, dass diese Ausnahme an dieser Stelle ausgelöst werden soll.

Zum Beispiel:

void doA(int a) throws IOException,{
      try{
         ......
 
      }catch(Exception1 e){
       throw e;
      }catch(Exception2 e){
       System.out.println("出错了!");
      }
      if(a!=b)
       throw new Exception3("自定义异常");
}

Im Codeblock können drei Ausnahmen auftreten (Exception1,Exception2,Exception3).
Wenn eine Exception1-Ausnahme auftritt, wird sie abgefangen und dann ausgelöst und vom Aufrufer der Methode behandelt.
Wenn eine Exception2-Ausnahme auftritt, behandelt die Methode diese selbst (d. h. System.out.println("Ein Fehler ist aufgetreten!");). Daher löst diese Methode keine Ausnahme2-Ausnahme mehr aus, und void doA() löst Ausnahme1 aus, und Ausnahme2 in Ausnahme3 muss nicht geschrieben werden.
Die Ausnahme Exception3 ist ein bestimmter logischer Fehler in der Methode. Der Programmierer hat ihn selbst behandelt. Wenn die Ausnahme Exception3 im Falle eines logischen Fehlers geworfen wird, muss der Aufrufer der Methode diese Ausnahme ebenfalls behandeln.

Die throw-Anweisung wird im Methodenkörper verwendet, um anzuzeigen, dass eine Ausnahme ausgelöst wird, die von den Anweisungen im Methodenkörper behandelt wird.
Die throws-Anweisung wird nach der Methodendeklaration verwendet, um anzugeben, dass eine Ausnahme ausgelöst und vom Aufrufer der Methode behandelt wird.

throws deklariert hauptsächlich, dass diese Methode diese Art von Ausnahme auslöst, sodass der Aufrufer weiß, dass er diese Ausnahme abfangen muss.
Throw ist eine spezifische Aktion zum Auslösen einer Ausnahme, also wird eine Ausnahmeinstanz ausgelöst.

Würfe zeigen, dass Sie diese Möglichkeit und Tendenz haben.
Wenn Sie etwas werfen, setzen Sie diese Tendenz in die Realität um.

Wenn es sich um eine Systemausnahme handelt, müssen Sie nichts tun, oder Sie können eine Ausnahme für die Methode auslösen, da Systemausnahmen automatisch vom System abgefangen werden können, sofern diese Ausnahme innerhalb der Methode behoben wird Methode oder an die Methode übergeben? Die Funktion der oberen Schicht hat tatsächlich den gleichen Effekt. Aber ich habe viele Informationen überprüft, und selbst wenn eine Ausnahme ausgelöst wird und vom System abgefangen werden kann, wird dennoch empfohlen, einen throws für die Methode zu schreiben, da dadurch andere Programmierer wissen können, welche Ausnahmen beim Abschluss eines großen Vorgangs auftreten Aufgabe.

Wenn es sich um eine selbstdefinierte Ausnahme handelt, müssen Sie Throws verwenden, um die Ausnahme auszulösen, die möglicherweise von der Methode ausgelöst wird. Andernfalls meldet die Kompilierung einen Fehler.

Ausführlichere Erläuterungen zu den Verwendungsunterschieden zwischen den Schlüsselwörtern „throw“ und „throws“ in der Java-Ausnahmebehandlung finden Sie auf der chinesischen PHP-Website für verwandte Artikel!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn