2011-01-12 11 views
8
String name = "Marcus"; 
static String s_name = "Peter"; 

public static void main(String[] args) {  
    System.out.println(name);//ERROR 
    System.out.println(s_name);//OK 
} 

ERROR: No se puede hacer una referencia estática al nombre del campo no estático¿Por qué hay un problema con una variable no estática que se lee desde main?

+0

mismo problema que con los métodos no estáticos. Ver http://stackoverflow.com/questions/ 2042813/calling-non-static-method-in-static-method-in-java – dkarp

Respuesta

6

La razón de que esto causa un problema es que main es un método estático, lo que significa que no tiene ningún objeto receptor. En otras palabras, no opera en relación con algún objeto. Por lo tanto, si intenta buscar un campo no estático, entonces Java se confunde sobre en qué objeto vive ese campo. Normalmente, supondría que el campo está en el objeto desde el que se invoca el método, pero como main es estático, el objeto no existe

Como regla general, no puede acceder a variables de instancia regulares desde métodos estáticos.

+0

Técnicamente, el objeto en el que estás operando es la clase en sí misma. Tampoco diría que es una regla general ... ' d decir que es una regla. –

+0

Tampoco diría que Java 'se confunde'. No hay nada de lo que confundirse. No hay ningún objeto de instancia. Periodo. Por lo tanto, no hay forma de acceder a un campo de instancia. – EJP

2

Para acceder a variables y funciones de miembros no estáticos, debe tener un objeto específico. (Por ejemplo, si todo lo que estaba dentro de class Bob { ... }, lo que tendría que hacer algo como

Bob bob = new Bob(); 
System.out.println(bob.name); 

dentro de su principal.

+0

(Gracias por la edición. Parece que he estado escribiendo demasiado Ruby últimamente). – Matt

Cuestiones relacionadas