Buenas noches!!
Vengo a resolver el ejercicio del capitulo 83° del curso. El enunciado dice así:
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
1. ¿Qué mensaje de error se obtiene?non-static variable this cannot be referenced from a static context2. ¿Por qué se obtiene este mensaje de error?Encontré 2 casos de como se podría arreglar:
Sin instancia:En la clase main no se puede usar el this por ser static. También el atributo
"atributo1" no esta declarado como static. El método
getAtribi1 tampoco funciona porque no esta declarado static. Todo método que vas a usar en la clase que tenga el main, tiene que ser estatico, si se desea usar (esta mas decir que lo que se pone estatico es lo que se va a encontrar afuera del metodo main). Sera métodos de clase, no va a necesitar de objetos (o instancias).
Con instancia:Hace falta crear un objeto Test. Así de simple. pero... ¿esto seria incorrecto?, ¿una mala practica como dicen...?
3. ¿Cómo podemos solucionarlo para que se ejecute lo que pretendemos?Sin instancia:
public class Test {
static int atributo1;
Test(int atrib){atributo1 = atrib;}
public static void main (String[ ] Args) {
atributo1 = 3;
System.out.println ("Mensaje 1");
System.out.println ("Atributo 1 vale " + getAtrib1());
}
public static int getAtrib1() {return atributo1;}
}
Con instancia: (¿Mala practica?)
public class Test {
int atributo1;
Test(int atrib){atributo1 = atrib;}
public static void main (String[ ] Args) {
Test lol = new Test(3);
System.out.println ("Mensaje 1");
System.out.println ("Atributo 1 vale " + lol.getAtrib1());
}
public int getAtrib1() {return atributo1;}
}
La ejecución de ambos casos seria así:
Sin instancia es lo que se quiere (muy seguro) en este capitulo, solo hice la otra forma por curiosear un poco. Se podía hacer de ambas formas con lectores también para introducir cualquier valor del teclado!
Esperare sus comentarios y sus debidas correcciones en el caso que este en lo incorrecto.
Saludos