2012-08-03 9 views
14

Was bedeutet in einer Java-Ausnahme?Was bedeutet <init> in einer Java-Ausnahme?

Zum Beispiel:

BlahBlahException... 

at java.io.FileInputStream.<init>(FileInputStream.java:20) 
+4

Kurzer Hinweis - Ihr Tag der "Compilerfehler" weist darauf hin, dass Sie möglicherweise keine angemessene Unterscheidung zwischen Fehlern bei der Kompilierungszeit und Ausnahmen bei der Ausführungszeit treffen. Das * ist kein * Compiler-Fehler, es ist eine Ausnahme. (Ich bearbeite das Tag jetzt, aber es ist etwas, dessen Sie sich bewusst sein sollten.) –

Antwort

16

, dass die Ausnahme in dem Bau des Objekts ausgelöst wird, gibt es zwei Möglichkeiten:

  • im Konstruktor
  • während Variablen
Initialisierung

Schauen Sie sich diese Demo an, die ich schrieb: http://ideone.com/Mm5w5


class Main 
{ 
     public static void main (String[] args) throws java.lang.Exception 
     { 
       try 
       { new Test(); } catch (Exception e) { e.printStackTrace(); } 

       try 
       { new Test2(); } catch (Exception e) { e.printStackTrace(); } 

       try 
       { new Test3(); } catch (Exception e) { e.printStackTrace(); } 


     } 

     static class Test 
     { 
       Object obj = getObject(); 
       Object getObject() 
       { throw new RuntimeException("getObject"); } 
     } 

     static class Test2 
     { 
       Test2() 
       { 
         throw new RuntimeException("constructor"); 
       } 
     } 

     static class Test3 
     { 
       Object obj1 = null; 
       String str = obj1.toString(); 
     } 
} 

Produziert:

java.lang.RuntimeException: getObject 
    at Main$Test.getObject(Main.java:24) 
    at Main$Test.<init>(Main.java:22) 
    at Main.main(Main.java:9) 
java.lang.RuntimeException: constructor 
    at Main$Test2.<init>(Main.java:31) 
    at Main.main(Main.java:12) 
java.lang.NullPointerException 
    at Main$Test3.<init>(Main.java:38) 
    at Main.main(Main.java:15) 
6

< init>

genannt wird

Instanzinitialisierungsmethode

, die von Ihrem Java-Compiler aus dem Konstruktor erstellt wird, den Sie definiert haben. Obwohl dies keine gültige Methodendefinition ist, erwartet Ihre JVM dies und alles, was Sie in den Konstruktor einfügen, wird in der Methode ausgeführt. Wenn Sie also eine Ausnahme mit from haben, können Sie sicher sein, dass es sich um den Konstruktor der ausgeführten Java-Klasse handelt. Lesen Sie mehr dazu auf Bill Venners Design-Technik Artikel auf Object Initialization.