2012-09-26 8 views
5

He usado setters en lugar de poner argumentos en el constructor predeterminado porque me ayuda a organizar mi código mejor¿Cómo inicializas una cadena en Java?

El problema es que la única variable en un proyecto que estoy haciendo es una cadena y no estoy seguro si Debería estar inicializándolo en la declaración (como una variable global?), En un método de instancia setter o si inicializarlo en el constructor de la clase.

Me pregunto si podría haber algo problemático en esta configuración si la instancia no está inicializado hasta que sea colocador se utiliza:

class MyClass{ 

    private String myString; 

    public MyClass(){ 

    } 
    public void setStuff(String s){ 

    this.myString=s; 
    } 
} 
+2

No estoy exactamente seguro de lo que entendemos por "variable global", ya que Java no tiene variables globales. – Ivan

+2

Lo que está llamando una variable global en 'variable de instancia' llamada en Java ... Y las variables de instancia se inicializan a su valor predeterminado ... (Aquí la variable String se inicializará a nulo) –

+0

Debería leer [Sun/Oracle Java tutoriales] (http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html), específicamente este sobre tipos de datos primitivos. –

Respuesta

1

¿No estás seguro de lo que quieres decir con variable global? ¿Es realmente una variable que es la misma independientemente del objeto que se crea? Si lo que debe ser estática

private static String myString = "str"; 

Si nunca cambia, entonces debería ser final y es entonces un mundial constante

public static final String MY_STRING = "str"; 

Esto puede ser público y accesible a través de

MyClass.MY_STRING 

Si solo es aplicable para cada objeto de la clase que se crea, entonces inícielo en el constructor o en la declaración

+0

Gracias, esto no responde la pregunta, pero es un buen punto de información. ¿Te importaría si agregué un poco tu respuesta para completarlo? – Magpie

+1

sí, adelante :) @Magpie – RNJ

7

¿Por qué no inicializar como:

private String myString = "My string"; 

El la forma más fácil posible.

+0

O 'myString = null;', si inicialmente es nulo, o 'myString =" ";', si desea inicializar a una cadena nula (vacía). (Pero todas las variables de clase e instancia se inicializan a 'null' implícitamente, por lo que' myString = null; 'es redundante, excepto para las variables locales.) –

+2

@HotLicks. ¿No se inicializaría para anular automáticamente ... ya que es una variable de instancia? –

+0

@RohitJain - Sí, estaba a punto de agregar ese punto. Pero a veces es bueno declarar la inicialización como nulo como una formalidad. –

3

Bueno, realmente depende de qué es esa variable y qué es lo que va a hacer.

¿Es una constante? Si es así, puede inicializarlo así:

private final String myString = "foo"; 

¿Está destinado a ser una variable de instancia? Si es así, usted debe ir para algo como esto:

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

Si se trata de algún tipo de propiedad opcional, la forma que tiene ahora podría estar bien también. Al final, todo depende de lo que vas a hacer con esa variable.

+0

Si es constante, debe _be_ una constante: private static final. –

+0

Estoy queriendo usar setters ¿por qué no? – Magpie

+0

¿Qué quieres decir con que "quieres usar setters"? No tenemos idea de lo que intenta hacer, por lo que es imposible para nosotros decir la mejor manera de hacerlo. Hay un tiempo y un lugar para usar mutadores; no debería "querer usar un colocador", debería usar lo mejor para cada situación, que a veces será un colocador y otras no. –

0

Realmente depende de lo que va a hacer MyClass. La mayoría de las veces, lo mejor es tener un constructor que inicialice la variable privada y que también tenga un getter y un setter para ella.

Una de las razones es que si tiene un método MyClassfoo que necesita myString que ser inicializado y se olvidó de llamar setStuff?

1

Al igual que usted tiene que se ve bien para mí. Por cierto, "global varible" puede ser engañoso, ya que puede implicar que la var es pública, mientras que es privada, pero accesible al exterior a través de un getter/setter público.

Pero para inicializar una cadena, la forma más sencilla es:

private String foo = "some string"; 
+1

¿Qué es este "foo"? – Magpie

+0

¿Hablas en serio? es el nombre de la variable String – amphibient

+2

@Magpie - "foo" (junto con "bar") es un nombre tradicional para una variable en un programa de ejemplo. Viene indirectamente del acrónimo militar FUBAR - F (ouled) Up Beyond All Recognition. –

Cuestiones relacionadas