¿Qué significa exactamente “estática” significa cuando la declaración de variables “globales” en Java?

StackOverflow https://stackoverflow.com/questions/3415781

Pregunta

He estado corriendo en este problema muchas veces y nunca me he molestado en saber por qué su suceso y aprender lo que "estáticos" significa en realidad. Yo sólo aplica el cambio que sugiere Eclipse y siguió adelante.

public class Member {

 // Global Variables
 int iNumVertices;
 int iNumEdges;

 public static void main(String[] args) {

  // do stuff

  iNumVertices = 0; // Cannot make a static reference to the non-static field iNumVertices

  // do more stuff

 } // main end 
}

Así Eclipse me dice que haga static int iNumVertices; y no estoy seguro de por qué. Entonces, ¿qué es exactamente "estática", cómo se utiliza, cuál es el propósito de la utilización de "estática", y por qué se me está dando este problema?

¿Fue útil?

Solución

Esta es su ejemplo:

public class Member {

    // Global Variables
    int iNumVertices;
    int iNumEdges;

    public static void main(String[] args) {

        // do stuff

        iNumVertices = 0; // Cannot make a static reference to the non-static field iNumVertices

    }
}

El main método es un método estático asociado con la clase. No se asocia con una instancia de Member, por lo que puede no variables de acceso que están asociados con una instancia de Member. La solución a esto es no para hacer esos campos estáticos. En su lugar, es necesario crear una instancia de Member usando la palabra clave new.

Aquí hay una versión modificada:

public class Member {
    // Fields
    private int iNumVertices;
    private int iNumEdges;

    public Member(){
        // init the class
    }

    public static void main(String[] args) {
        Member member = new Member();
        member.iNumVertices = 0;
        // do more stuff
    }
}

encontrarse a sí mismo creando estática globales es una indicación de que usted debe pensar cuidadosamente acerca de cómo se está diseñando algo. No es siempre mal, pero debe decirle a pensar en lo que estás haciendo.

Otros consejos

estática variables son aquellos que se comparte a través de todos los objetos de una clase. Aquí en el ejemplo para todos los objetos de Miembro se crea, se llega objetos que tienen su propio iNumVertices valores. Cuando se utiliza estática con una variable, sólo hay una variable compartida a través de todos los objetos de Miembro . estática métodos funcionan de la misma manera - que se comparten entre todos los objetos.

Desde estática las variables / métodos son comunes a todos los objetos, una necesidad no crea un objeto de la clase para acceder a estas variables / métodos.

Las variables no estáticas como iNumVertices pertenecen a un objeto de una clase. No se puede acceder sin necesidad de crear un objeto. Así que cuando accede a una variable no estática de un contexto estático (aquí principal método), a continuación, java no sabría qué objeto de iNumVertices que están tratando de accesss. Por lo tanto el error.

Si tienen un iNumVertices estática, o se refieren a ella mediante la creación de un objeto de miembro

Member m = new Member();
m.iNumVertices = 0;
learn what "static" actually means

¿Qué estática en realidad significa que la variable de clase será igual para todas las instancias de esa clase en particular, sin embargo, si se quiere evitar el uso de variables estáticas (que es una buena idea, ya que las variables estáticas se mantienen en la memoria) puede pasar variables valor artesa constructor evitando de este modo el uso de modificador static, y lograr el mismo efecto (es decir si pasa el mismo valor durante la instanciación clase).

Aquí es código de ejemplo:

public class Car{

    private int speed;

    public Car(int speed){
        this.speed = speed;
    }

}

Así que usted puede hacer esto al crear nueva instancia:

Car car = new Car(100);

y cada vez que se crea instancia de coches tendrá velocidad de 100, evitando así private static int speed = 100; declaración estática

Las variables estáticas son variables de clase. Habrá una sola copia de esa variable disponible, a todas las instancias de la clase y van a compartir esa variable. Los miembros estáticos también se pueden utilizar sin hacer referencia a una instancia específica de la clase.

Más aquí:

http://download.oracle.com/javase/tutorial /java/javaOO/classvars.html

Las variables estáticas no necesitan tener la clase de una instancia con el fin de tener acceso, por lo que si usted está tratando de acceder a un formulario variable no estática de un contexto estático se arriesga a tratar de acceder a algo que no se ha inicializado / instanciada .

Los métodos estáticos puede acceder a las variables estáticas solamente. Hay dos tipos de variables en clase. uno es variables estáticas (también variables de clase) y otro es variable de instancia. Sólo existe una copia de la variable estática en la memoria, pero las variables de instancia se creará una instancia de cada objeto. Así que para todas las variables estáticas objetos de acceso a la misma variable y cualquier cambio realizado por un objeto se reflejarán a otros objetos. La pregunta aquí es ¿por qué es que los métodos tienen que ser estática de acceso a las variables estáticas. Cuando haces un método estático, se puede acceder al método sin crear instancias de objetos de esa clase. Así que si este método es capaz de variables de instancia de acceso a continuación, para las variables de objeto, que debería hacer el cambio a? La otra forma es posible, es decir no métodos estáticos pueden acceder a variables estáticas.

Cada variable de clase (una variable declarada dentro del cuerpo de la clase y fuera de los cuerpos de los métodos) utilizado en un necesidades método estático para ser declarado estática también.

variables y métodos de la clase estáticos pueden ser accedidos fuera de esa clase sin la necesidad de una instancia de esa clase.

variables estáticas son comunes a todas las instancias de una clase.

Nota: Como se dijo anteriormente estos son variables de clase es decir, que comparten todos los casos

.

Estos también puede ser llamado como variables de nivel de clase. Generalmente se define constantes (También necesitará palabra clave final para definir constantes y variables globales) como estática.

Para obtener más información, consulte: http://download.oracle.com/javase/tutorial/java/ javaOO / classvars.html

http://www.roseindia.net/java/beginners/staticvariable.shtml

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top