Hola. Dejo el Ejercicio CU00683B del tutorial pdf de programación Java. Concepto de métodos de clase o static y métodos de instancia. Diferencias. Método main de Java.
EJERCICIO
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? ¿Por qué se obtiene este mensaje de error? ¿Cómo podemos solucionarlo para que se ejecute lo que pretendemos? Puedes comprobar si tus respuestas son correctas consultando en los foros aprenderaprogramar.com
¿Qué mensaje de error se obtiene? non-static variable this cannot be referenced from a static context
(variable no estática a la que no se puede hacer referencia desde un contexto estático)
¿Por qué se obtiene este mensaje de error? Por que se llama a un metodo no estatico desde un metodo estatico.
¿Cómo podemos solucionarlo para que se ejecute lo que pretendemos? Creando un nuevo objeto Test dentro del método main .Al crear un objeto dentro de un método, este objeto hereda todas la propiedades del método donde se ha creado.
Y luego llamando al método con el nombre de la clase que lo contiene (en este caso con el nombre del objeto creado).
public static void main (String[ ] Args) {
int atri=0;
Test test=new Test(atri); System.out.println ("Mensaje 1");
System.out.println ("Atributo 1 vale" + test.getAtrib1()); } //Cierre del main
Cambiando la variable int atributo=0 a static int atributo=0
Y el metodo public int getAtrib1() {return atributo1;}
a public static int getAtrib1() {return atributo1;}
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" + Test.getAtrib1());
} //Cierre del main
public static int getAtrib1() {return atributo1;}} //Cierre de la clase
Gracias
.