2013-07-09 14 views
15

Java noob qui. Quando si codifica una nuova classe, quando si definiscono gli attributi della classe, c'è una differenza nella definizione di una variabile e nell'inizializzazione di una variabile. Ci sono mai casi in cui vorresti fare uno sopra l'altro? Ho usato una primitiva e un oggetto apposta nel caso in cui ci sia una differenza per entrambi i casi.Java che definisce o inizializza gli attributi di una classe

cioè

import Java.util.Random; 

public class Something extends Activity { 
    int integer; 
    Random random = null; 

    Something(){ 
     integer = 0; 
     random = new Random(); 
     .... 

vs. import java.util.Random;

public class Something extends Activity { 
    int integer = null; 
    Random random; 

    Something(){ 
     integer = 0; 
     random = new Random(); 
     .... 
+0

Vorrei elencare le variabili a livello di classe e inizializzarle con un costruttore. – Venki

+0

anche tu stai cercando di passare un null a una primitiva che potrebbe causare mal di testa. – Venki

risposta

12

In primo luogo non è possibile impostare una primitiva come null come primitiva, ma solo dati in cui null è un riferimento a un oggetto. Se si è tentato di compilare int i = null si otterrebbe un errore di tipi incompatibili.

secondo inizializzazione delle variabili null o 0 quando li dichiara nella classe è ridondante come in Java, primitive predefinita 0 (o false) e oggetto riferimenti predefinito null. Questo non è il caso per le variabili locali tuttavia, se si è tentato il seguito si otterrebbe un errore di inizializzazione in fase di compilazione

public static void main(String[] args) 
{ 
    int i; 
    System.out.print(i); 
} 

esplicitamente inizializzare a un valore predefinito di 0 o false o null è inutile, ma si potrebbe desiderare a loro impostato su un valore di default quindi è possibile creare un costruttore che ha i valori predefiniti per esempio

public MyClass 
{ 
    int theDate = 9; 
    String day = "Tuesday"; 

    // This would return the default values of the class 
    public MyClass() 
    { 
    } 

    // Where as this would return the new String 
    public MyClass (String aDiffDay) 
    { 
     day = aDiffDay; 
    } 
} 
1

In Java, l'inizializzazione è definita esplicitamente nelle specifiche del linguaggio. Per i campi e componenti dell'array, quando vengono creati elementi, vengono impostati automaticamente i seguenti valori predefiniti dal sistema:

numeri: 0 o 0.0

booleani: true

riferimenti agli oggetti: null

Ciò significa che l'impostazione esplicita dei campi su 0, false o null (a seconda dei casi) non è necessaria e ridondante.

2

Shanku e Morpheus risposto correttamente alla domanda. Innanzitutto, si otterrà un errore di compilazione impostando la variabile int primitiva "intero" su null; puoi farlo solo per gli oggetti. Secondo, Shanku ha ragione che Java assegna valori predefiniti alle variabili di istanza , che sono "interi" e "casuali" nel codice di esempio; le variabili di istanza sono visualizzabili all'interno della classe o oltre, a seconda dell'ambito (pubblico, privato, protetto, pacchetto).

Tuttavia, i valori predefiniti sono non assegnati per variabili locali. Ad esempio, se hai assegnato una variabile nel tuo costruttore come "int height"; quindi non verrà inizializzato a zero.

Si consiglia di leggere lo Java variable documentation, che descrive molto bene le variabili e inoltre è possibile anche esaminare lo Java tutorials, che di nuovo è un ottimo materiale di lettura.

Problemi correlati