2012-08-03 20 views
14

Che cosa significa <init> in un'eccezione Java?Che cosa significa <init> in un'eccezione Java?

Ad esempio:

BlahBlahException... 

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

Nota rapida: il tag "errori del compilatore" suggerisce che potresti non tracciare un'appropriata distinzione tra errori in fase di compilazione ed eccezioni in fase di esecuzione. Questo * non è * un errore del compilatore, è un'eccezione. (Ora modifico il tag, ma è qualcosa di cui essere a conoscenza.) –

risposta

16

che l'eccezione viene lanciata nella costruzione dell'oggetto, ci sono due opzioni:

  • nel costruttore
  • durante l'inizializzazione delle variabili

Dai un'occhiata a questa demo che ho scritto: 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(); 
     } 
} 

produce:

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>

si chiama

Istanza Metodo di inizializzazione

che viene creato dal compilatore java dal costruttore definito. Sebbene non sia una definizione del metodo valida, la tua JVM si aspetta che questo e qualsiasi cosa tu inserisca nel costruttore sarà eseguito nel metodo. Pertanto, quando si esegue un'eccezione da, si può essere sicuri che provenga dal costruttore della classe java eseguita. Maggiori informazioni su questo sugli articoli della tecnica di progettazione di Bill Venner al numero Object Initialization.