2012-09-26 17 views
5

Ho utilizzato i setter invece di inserire argomenti nel costruttore predefinito perché mi aiuta a organizzare meglio il mio codiceCome inizializzare una stringa in java?

Il problema è che l'unica variabile su un progetto che sto facendo è una stringa e non sono sicuro se Dovrei inizializzarlo nella dichiarazione (come variabile globale?), In un metodo di istanza setter o se inizializzarlo nel costruttore della classe.

Mi chiedo se ci potrebbe essere qualcosa di problematico questo set up se l'istanza non viene inizializzato fino a quando è setter viene utilizzato:

class MyClass{ 

    private String myString; 

    public MyClass(){ 

    } 
    public void setStuff(String s){ 

    this.myString=s; 
    } 
} 
+2

Non sono esattamente sicuro di cosa si intende per "variabile globale" dal momento che Java non ha le variabili globali. – Ivan

+2

Che cosa si sta chiamando una variabile globale in chiamato 'variabile di istanza' in Java .. E le variabili di istanza sono inizializzate al loro valore predefinito .. (Qui la variabile String verrà inizializzata su null) –

+0

Si dovrebbe leggere [il Sun/Oracle Java tutorial] (http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html), in particolare questo su tipi di dati primitivi. –

risposta

1

Non sai cosa intendi per variabile globale? È veramente una variabile che è la stessa in relazione all'oggetto che viene creato? Se quindi dovrebbe essere statico

private static String myString = "str"; 

Se non cambia, allora dovrebbe essere definitiva ed è quindi un globale costante

public static final String MY_STRING = "str"; 

Questo può quindi essere pubblico e vi si accede tramite

MyClass.MY_STRING 

Se è applicabile solo per ogni oggetto della classe che viene creato, inizializzalo nel costruttore o nella dichiarazione

+0

Grazie, questo non risponde alla domanda ma è davvero un buon punto di informazione. Ti dispiacerebbe se aggiungessi un po 'la tua risposta per completarla? – Magpie

+1

sì vai per quello :) @Magpie – RNJ

7

Perché non basta inizializzare come:

private String myString = "My string"; 

Il modo più semplice possibile.

+0

Oppure 'myString = null;', se inizialmente è null o 'myString =" ";', se si desidera inizializzarsi su una stringa vuota (vuota). (Ma tutte le variabili di classe e di istanza sono inizializzate in modo "nullo" implicitamente, quindi 'myString = null;' è ridondante tranne che per le variabili locali.) –

+2

@HotLicks. Non sarebbe inizializzato a null automaticamente .. Come è variabile di istanza ?? –

+0

@RohitJain - Sì, stavo proprio girando per aggiungere quel punto. Ma a volte è bello dichiarare l'inizializzazione come null. –

3

Bene, dipende davvero da cosa sia e cosa farà quella variabile.

È una costante? In tal caso, è possibile inizializzarlo in questo modo:

È pensato per essere una variabile di istanza? Se è così, si dovrebbe andare per qualcosa di simile:

public MyClass(string myString) 
{ 
    this.myString = myString; 
} 

Se si tratta di una sorta di proprietà facoltativa, il modo che hai ora potrebbe andare bene pure. Alla fine, tutto dipende da cosa farai con quella variabile.

+0

Se è costante, dovrebbe _be_ una costante: finale statico privato. –

+0

Sto volendo usare setter è perché no. – Magpie

+0

Cosa intendi per "voler usare setter"? Non abbiamo idea di cosa stai cercando di fare, quindi è impossibile per noi dire il modo migliore per farlo. C'è un tempo e un posto per usare i mutatori; non dovresti "voler usare un setter" dovresti usare ciò che è meglio per ogni situazione, che a volte sarà un setter e, a volte, non lo farà. –

0

Dipende veramente da cosa farà MyClass. La maggior parte delle volte è meglio avere un costruttore che inizializzi la variabile privata e che abbia anche un getter e setter per esso.

Uno dei motivi è che cosa se MyClass ha un metodo che deve foomyString essere inizializzato e hai dimenticato di chiamare setStuff?

1

Proprio come hai fatto per me. A proposito, "globale variabile" può essere fuorviante perché potrebbe implicare che la variabile è pubblica mentre è privata ma accessibile all'esterno tramite un getter/setter pubblico.

Ma per inizializzare una stringa, il modo più semplice è:

private String foo = "some string"; 
+1

cos'è questo "foo"? – Magpie

+0

sei serio? è il nome della variabile String – amphibient

+2

@Magpie - "foo" (insieme a "bar") è un nome tradizionale per una variabile in un programma di esempio. Deriva piuttosto indirettamente dall'acronimo slang militare FUBAR - F (ouled) Up Beyond All Recognition. –

Problemi correlati