2011-06-21 11 views
15

Supongamos lo siguiente:En Java, ¿las variables declaradas dentro de los métodos estáticos son estáticas?

 
private static boolean A() 
{ 
    int parsedUntil = 0; 
    ... 
    ... 
    ... 
} 

Está parsedUntil considerado como una variable estática? Noté que no puedo declararlo como estático dentro de esta función estática.

Pregunta de seguimiento: He leído que una variable estática solo se inicializará una vez. ¿Eso significa que la primera vez que llamo a la función A() el valor se establecerá en cero, pero cada vez que llamo A(), esa fila se omite?

Respuesta

23

No, no es una variable estática. Es una variable local. Cualquier variable declarada en un método es una variable local. Si quieres una variable estática, hay que declararlo fuera del método:

private static int parsedUntil = 0; 

No hay manera de declarar una variable estática que sólo se puede utilizar dentro de un único método.

+1

Se trata de alcance. El alcance es local para el método, independientemente del tipo de método. – Robin

+2

@Robin: No, es de por vida. En otros lenguajes, "locals estáticos" puede tener un alcance de método único pero duración estática, que a veces es útil; en ambos casos, el alcance es local para el método, pero la duración es diferente. – configurator

6

no, A() es un método estático, y parsedUntil es una variable local dentro A.

modificadores como static no son válidos en las variables locales (sólo se permite que yo sepa final)

Seguimiento Pregunta: He leído que una variable estática solo será inicializada una vez.

cierto

¿significa que el primera vez que llame a la función A() el valor se establece en cero, pero todos los demás vez que llamo A(), esa fila es ¿omitido?

desde parseadoHasta que no sea un campo estático, sino una variable local en un método estático, este no es el caso.

+0

Pero, ¿qué significaría si lo declarara como final dentro de la función? En cuanto a las clases, leí que la palabra clave final significa que las funciones de dicha clase no pueden sobrecargarse por subclases. (¿Tal vez esas clases ni siquiera pueden extenderse?) –

+0

en variables locales, final significa que la variable no puede ser reasignada –

5

static Las variables no se pueden declarar localmente dentro de los métodos; solo pueden ser miembros de una clase y se inicializan cuando se carga la clase.

+0

¡Gracias! Cuando dices que solo pueden ser miembros de una clase, recuerdo que lo he leído y ¡tiene sentido! –

1

Java no tiene variables locales estáticas como C o C++, por lo que nunca puede tener static int parsedUtil = 0;.

Así que no, parsedUtil no es en ningún sentido "estático". Su valor se inicializa en 0 cada vez que se ejecuta el método.

+0

Las variables locales NO se inicializan en Java. – Ian

+0

@Ian - Según JLS 14.4.2: "* Si un declarador de [variable local] tiene un inicializador, el inicializador se evalúa y su valor se asigna a la variable. *" Eso es lo suficientemente cerca para mí;) –

+0

Punto razonable . Pero, a diferencia de las variables en el ámbito de clase o instancia, Java no realiza ninguna inicialización por ** predeterminado **. Ese fue el punto que estaba tratando de hacer, aunque al releer tu respuesta, veo que en realidad no se aplica en este caso. Mi error. – Ian

1

No, no es C.

parsedUntil no es estática. Es solo una variable local. No puede declarar una variable estática dentro del método.

En relación con la segunda pregunta, las variables estáticas pueden asignarse tantas veces como lo desee. No puede reasignar solo las variables finales.

+0

Gran explicación sobre estática vs final, gracias! –

Cuestiones relacionadas