2012-08-03 11 views
14

¿Qué significa <init> en una excepción de Java?¿Qué significa <init> en una excepción de Java?

Por ejemplo:

BlahBlahException... 

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

Nota rápida: su etiqueta de "errores del compilador" sugiere que no está dibujando una distinción adecuada entre los errores de tiempo de compilación y las excepciones de tiempo de ejecución. Este * no es * un error de compilación, es una excepción. (Editaré la etiqueta ahora, pero es algo de lo que debe tenerse en cuenta). –

Respuesta

16

Que la excepción en la construcción del objeto, hay dos opciones:

  • en el constructor
  • al inicializar las variables

Mira esta demostración Escribí: 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>

se llama

Método de inicialización de instancia

creado por el compilador de java del constructor que ha definido. Aunque no es una definición de método válida, su JVM espera que esto y todo lo que ponga en el constructor se ejecute en el método. Entonces cuando tienes una excepción con from, puedes estar seguro de que es del constructor de la clase java ejecutada. Lea más sobre esto en artículos de técnica de diseño de Bill Venner en Object Initialization.