2014-11-10 11 views
6

Nel seguente esempio che utilizza JDBC (questa domanda anche se non è specifico per JDBC):Perché l'inizializzazione dei riferimenti a null è consentita in Java?

Connection conn = null; 

try 
{ 
    ..... Do the normal JDBC thing here .... 
} 
catch(SQLException se) 
{ 
    if(conn != null) 
    { 
    conn.close(); 
    } 
} 

Se non mi inizializzare il conn al null poi il compilatore si lamenta che nel blocco catch non riesco a utilizzare un riferimento non è stato inizializzato.

Java per impostazione predefinita inizializza un riferimento oggetto su null, quindi perché è necessario inizializzarlo in modo esplicito su null. Se il compilatore non ha gradito il valore originale del riferimento che era nullo per iniziare, perché ha persino accettato la mia inizializzazione esplicita?

NOTA: Sto usando Eclipse Luna come IDE.

+1

Il tuo titolo non ha nulla a che fare con la tua domanda. – EJP

+0

Al momento di fare questa domanda (con la consapevolezza che avevo) il titolo mi era perfettamente logico. Con il senno di poi, naturalmente .... :) – davison

+0

Dovresti chiudere la connessione nel blocco ** finally **, penso. – EpicPandaForce

risposta

8

Inizializza solo una variabile su null nello scope della classe. Sei in un ambito del metodo, quindi devi inizializzare esplicitamente la variabile su null.

Se la variabile è definita a livello di classe, verrà inizializzata su null.

+0

ha senso. Nell'ambito di un metodo, quale valore ha Java da solo? È un valore di spazzatura sconosciuto? – davison

+3

Nota che non sta inizializzando un * oggetto * - sta inizializzando una * variabile *. Sono cose molto diverse. –

+0

concordato !! la sua inizializzazione del riferimento all'oggetto. – davison