Hola a todos !! Paso a responder las preguntas del ejercicio CU00683B del curso de fundamentos de Java desde cero. Desde ya muchas gracias. Saludos, Luis
EJERCICIO
Intenta compilar el siguiente código:
public class Test2 {
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? ¿Por qué se obtiene este mensaje de error? ¿Cómo podemos solucionarlo para que se ejecute lo que pretendemos?
Respuesta: (los errores se van encadenando y están indicados en rojo)
System.out.println ("Atributo 1 vale" + this.getAtrib1());
"non-static variable this cannot be referenced from static context"
quitamos el "this."
porque los métodos estáticos tiene esta limitación:"b) No pueden invocar a un método de instancia de la misma clase (lógico pues los métodos de instancia van asociados a objetos)."
------------------------------------------------------------------
System.out.println ("Atributo 1 vale" + getAtrib1());
"non-static method getAtrib1() cannot be referenced from static context"
debemos declarar static el método:
public static int getAtrib1() {return atributo1;}
porque al no existir una instancia (objeto) los métodos tienen que ser de clase o estáticos
-------------------------------------------------------------------
public static int getAtrib1() {return atributo1;}
"non-static variable atributo1 cannot be referenced from a static context "
debemos declarar static a atributo1 :
static int atributo1;
porque los métodos estáticos tiene esta limitación:"a) No pueden acceder a campos de instancia (lógico, pues los campos van asociados a objetos)."
El código corregido queda:
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 del main
public static int getAtrib1() {return atributo1;}
} //Cierre de la clase