2010-07-31 17 views
7

¿Podemos declarar Static Variables dentro del método Main? Porque recibo un mensaje de error:¿Cómo declaro una variable estática dentro del método Main?

Illegal Start of Expression 
+1

Por favor, pegue el código correspondiente. –

+2

Si, como sugieren algunos comentaristas, tu pregunta está inspirada en el hecho de que * puedes * hacer esto en C, entonces deberías indicarlo en tu pregunta, para que las respuestas te ayuden al señalar las diferencias entre Java y C. – MatrixFrog

+0

Quizás podamos responder mejor si sabemos por qué necesita usar una variable estática dentro de un método? Todas las variables declaradas dentro de un método tienen un alcance solo para ese método.Háganos saber qué problema está tratando de resolver y estoy seguro de que podemos encontrar algunas buenas respuestas para usted. – CoolBeans

Respuesta

26

Obviamente, no, no podemos.

En Java, static significa que es una variable/método de una clase, pertenece a toda la clase pero no a uno de sus ciertos objetos.

Esto significa que la palabra clave static se puede usar solo en un 'alcance de clase', es decir, no tiene ningún sentido dentro de los métodos.

+2

Podría tener el significado que tiene en las funciones C ... De wikipedia: "Variables locales estáticas: las variables declaradas como estáticas dentro de una función se asignan estáticamente teniendo el mismo alcance que las variables locales automáticas. en sus variables locales estáticas durante una llamada todavía estarán presentes cuando se vuelva a llamar a la función ". –

+1

@functional: mi sugerencia se basa en la etiqueta 'java' cerca de la pregunta. – Roman

+3

Ok, tengo eso. Solo digo que podría tener sentido estar dentro de los métodos también. Eso es todo –

1

No puede, ¿por qué quiere hacer eso? Siempre puedes declararlo en el nivel de clase al que pertenece.

+1

Las variables estáticas dentro de los métodos son legales en C y C++, quizás ese sea su trasfondo. –

+0

Lo sé, pero Java no es C++ :) Las variables estáticas en C/C++ tienen la ventaja de no eliminarse una vez que la función finaliza, por lo que puede pasarlas a cualquier parte. Con el recolector de basura de Java, puede pasar la variable sin preocupaciones, por eso le pregunté cuál era su punto. Gracias por tu comentario. –

6

Se pueden utilizar variables estáticas dentro de su método main (o cualquier otro método), pero hay que declararlos en la clase:

Esto es totalmente bien:

public Class YourClass { 
    static int someNumber = 5; 

    public static void main(String[] args) { 
    System.out.println(someNumber); 
    } 
} 

Esto está muy bien también , pero en este caso, someNumber es una variable local, no estática.

public Class YourClass { 

    public static void main(String[] args) { 
    int someNumber = 5; 
    System.out.println(someNumber); 
    } 
} 
4

Debido a que las variables estáticas se asignan memoria en el momento de carga de clases, y la memoria se asigna solamente once.Now si tiene una variable estática dentro de un método, entonces esa variable está bajo el alcance del método, no la clase de ámbito, y JVM no puede asignarle memoria, porque se llama a un método con la ayuda del objeto de la clase, y eso es en tiempo de ejecución, no en el tiempo de carga de la clase.

3

Como las variables estáticas están disponibles para toda la clase, conceptualmente solo se puede declarar después de la clase cuyo ámbito es global, donde todos los bloques o métodos estáticos tienen su propio alcance.

1

En C, puede tener asignadas estáticamente variables de ámbito local. Lamentablemente, esto no se admite directamente en Java. Pero puede lograr el mismo efecto utilizando clases anidadas.

Por ejemplo, se permite lo siguiente, pero es una mala ingeniería, porque el alcance de x es mucho mayor de lo que debe ser. También hay una dependencia no obvia entre dos miembros (x y getNextValue).

static int x = 42; 
public static int getNextValue() { 
    return ++x; 
} 

Uno realmente le gustaría hacer lo siguiente, pero no es legal:

public static int getNextValue() { 
    static int x = 42;    // not legal :-(
    return ++x; 
} 

Sin embargo, usted podría hacer esto en su lugar,

public static class getNext { 
    static int x = 42; 
    public static int value() { 
     return ++x; 
    } 
} 

Es mejor ingeniería a expensas de alguna fealdad

Cuestiones relacionadas