2012-03-19 13 views
6

¿Por qué podemos acceder a una variable estática desde el objeto en Java, como el código siguiente?Acceder a la variable estática del objeto en Java

public class Static { 
    private static String x = "Static variable"; 

    public static void main(String[] args) 
    { 
    Static member = new Static(); 
    System.out.println(member.x); 
    } 
} 
+1

¿Por qué no? ¿Tiene una razón por la que cree que no debería ser posible? – EJP

+1

También podría hacer Static.x sin necesidad de crear un objeto. – nikhil

+0

IIRC, Josh Bloch ha dicho que permitir esto fue una mala decisión. –

Respuesta

8

En general, las variables públicas pueden ser accedidas por todos, y las variables privadas solo se puede acceder desde dentro de la instancia actual de la clase. En su ejemplo, puede acceder a la variable x desde el método main, porque ese método está dentro de la clase Estática.

Si se está preguntando por qué puede acceder a él desde otra instancia de clase estática que la que tiene actualmente (que generalmente no está permitido para variables privadas), es simplemente porque las variables estáticas no Existen en base a cada instancia, pero por clase. Esto significa que se puede acceder a la misma variable estática de A desde todas las instancias de A.

Si este no fuera el caso, nadie podría acceder a la variable estática privada en absoluto, ya que no pertenece a una instancia, sino a todas.

1

Las variables estáticas son llamadas variables de clase, porque están disponibles para cada objeto de esa clase.

Como miembro es un objeto de la clase Estático, por lo que puede acceder a todas las variables estáticas y no estáticas de la clase Estática a través del objeto miembro.

+2

No responde la pregunta, no es que haya una respuesta. – EJP

2

No es una buena práctica hacer referencia a una variable estática de esa manera.

Sin embargo, su pregunta era ¿por qué está permitido? Supongo que la respuesta es que un desarrollador puede cambiar un miembro de instancia (campo o variable) a un miembro estático sin tener que cambiar todas las referencias a ese miembro.

Esto es especialmente cierto en entornos de varios desarrolladores. De lo contrario, es posible que su código no se pueda compilar solo porque su socio haya cambiado algunas variables de instancia a variables estáticas.

0

El miembro no estático es miembro de la instancia. El miembro estático (de toda la clase) no podía acceder a los miembros de la instancia porque no hay manera de determinar qué instancia posee ningún miembro específico no estático.

El objeto instancia siempre podría referirse a miembros estáticos, ya que pertenece a la clase que global (compartida) a sus instancias.

Cuestiones relacionadas