2017-02-09 3 views
1

Ich weiß, dass wir Fehler in Java mit try catch nicht behandeln sollten, aber ich habe es zum Lernen ausprobiert und festgestellt, dass wir Fehler in ähnlicher Weise umgehen können. Exception mit try catch block. Selbst Code nach catch-Block wird ebenfalls ausgeführt. Ich habe einen StackOverFlowError generiert, kann aber trotzdem lokale Variablen initialisieren. Kann jemand bitte es erklären?Warum wird die Fehlerbehandlung nicht empfohlen?

import java.util.LinkedList; 
import java.util.List; 

public class ExceptionDemo { 

    public static void main(String[] args) { 
     try{ 
       method1(); 
     } 
     catch(Error e){ 
      System.out.println(e.getStackTrace()); 

      System.out.println("Hello world"); 
      int a =10; 
      System.out.println(a);   
      method(); 
     }  
     System.out.println("Hello world2"); 
    } 

    public static void method1(){ 
     method1(); 
    } 

    public static void method(){ 
     List l1 = new LinkedList(); 
     l1.add("A");   
     int[] aa = new int[10000]; 
     aa[0]=25; 
     System.out.println(aa[0]); 

     int b =10; 
     int c = 20;  
     System.out.println(b +""+c); 
    } 
} 

Ausgang dieser Klasse ist -

[Ljava.lang.StackTraceElement;@1db9742 

Hello world 
10 
25 
1020 
Hello world2 
+2

was fragen Sie? –

+0

Willkommen bei Stack Overflow! Bitte nimm die [Tour], schau dich um und lies dir die [Hilfe] durch, insbesondere [* Wie stelle ich eine gute Frage? *] (/ Help/how-to-ask) –

+0

Aber trotzdem kann ich initialisieren Objekt und lokale Variablen, wie es passiert? –

Antwort

5

ich in meiner Antwort auf diesen Teil Ihrer Frage konzentrieren, die nicht auf die „fangen, warum nicht Errors“ verwandt ist; aber deine implizite Idee, dass du "keine Fehler finden kannst". Denn: Deine Idee ist einfach falsch!

Sie können fangen alle Unterklassen von Throwable. Schau dir einfach die Wörter an: alles, was geworfen werden kann kann auch sein gefangen.

Error ist eine Unterklasse von Throwable!

Aber Sie haben Recht, dass nur Instanzen dieser anderen Kindklasse Exception von Throwable mit try/catch abgefangen werden sollten. Für "warum nicht Fehler fangen"; das wird ausführlich über here erklärt!

+1

Das Problem ist, dass, wenn ein Fehler aufgetreten ist, Sie nicht garantieren können, dass die JVM von diesem Punkt korrekt funktioniert. Sicher, es wird Sie fangen und versuchen, einige Dinge zu tun (schließlich ist es sinnvoll, den Fehler zu protokollieren), aber Sie sollten Ihr Programm zu diesem Zeitpunkt als instabil betrachten. –

+1

Darauf weist der letzte Absatz am Ende hin. Und nur für die Aufzeichnung: Es kommt darauf an: Wir haben eine verteilte Umgebung, und manchmal, wenn ich die falsche Version einer Java-Klasse auf ein anderes System setze, verursacht das MethodNotFoundErrors auf diesen Systemen. Und wir fangen tatsächlich diese (LinkageErrors methinks), weil wir wissen, dass sie passieren können, wenn wir versauen; Wenn wir sie erfassen, können wir die erforderliche Säuberung durchführen, wenn unsere Operationen fehlschlagen. – GhostCat

Verwandte Themen