Buenas tardes, ahi va mi respuesta
Intenta compilar el siguiente código:
public class Test {
int atributo1;
Test (int atrib) {atributo1 = 0;}
public static void main (String[ ] Args) {
System.out.println ("Mensaje 1");
System.out.println ("Atributo 1 vale" + this.getAtrib1());
} //Cierre del main
public int getAtrib1() {return atributo1;}
} //Cierre de la clase
¿Qué mensaje de error se obtiene?non static variable this cannot be referenced from a static context
¿Por qué se obtiene este mensaje de error?Bueno el metodo main al ser static, solo puede acceder a variables y metodos de su clase si son static también, sino se entiende que son variables y metodos de instancia y no de clase.
En concreto el error en el this, aunque ponga en static la variable y el metodo sigue persistiendo.
System.out.println ("Atributo 1 vale" + this.getAtrib1());
Al quitarlo compila y hace lo que queremos, deduzco que tiene que ver con que "this." hace referencia a la variable de instancia y no de Clase, aunque buscando no lo he podido confirmar cien por cien seguro.
Encontré esto para asegurarme de que no decía una barbaridad.
this
Al acceder a variables de instancia de una clase, la palabra clave this hace referencia a los miembros de la propia clase en el objeto actual; es decir, this se refiere al objeto actual sobre el que está actuando un método determinado y se utiliza siempre que se quiera hace referencia al objetoactual de la clase.
¿Cómo podemos solucionarlo para que se ejecute lo que pretendemos?
/**
* Write a description of class Test here.
*
* @author (your name)
* @version (a version number or a date)
*/
public class Test {
static int atributo1;
Test(int atrib) { atributo1 = 0; }
public static void main (String [] args) {
System.out.println ("Mensaje 1");
System.out.println ("Atributo 1 vale" + getAtrib1() );
} //cierre main
static public int getAtrib1() { return atributo1; }
} //cierre clase
También me funciona añadiendo
Test.getAtrib1() pero no con el
this.getAtrib1 lo que me dio la idea de pensar que this se referia al metodo o variable de instancia y no de clase.
System.out.println ("Atributo 1 vale" + Test.getAtrib1() );
P.D. por lo que veo no acierto con mi deducción del this.getAtrib1, si se refiere a la clase no a instancia, pero aun así me da error y no comprendo porque, poniendo todo static, en cambio Test.getAtrib1 no da error, aunque deberian ser lo mismo. Si alguien puede ilustrarme lo agradeceré porque no lo veo.