Hola
Aquí traigo la resolución al ejercicio CU00683B del manual de programación Java con BlucJ sobre los métodos de clase o estaticos y métodos de instancia.
El ejercicio es el siguiente:
Solucionar los errores de compilación de la siguiente clase
package aplicacion;
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());
}
public int getAtrib1(){
return atributo1;
}
}
¿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?
¿Qué mensaje de error se obtiene? ¿Por qué se obtiene este mensaje de error?
No es un solo error el que se obtiene, sino una serie de errores encadenados a continuación, los voy exponiendo.
Primer error:
El error literal es
"no se puede usar this en un contexto estático".
La palabra reservada
"this" hace referencia a una instancia del objeto de esta clase, como el objeto nunca va a ser creado no tiene sentido utilizar la palabra reservada "this" dentro de un método de clase o estático.
Este es el código tras corregir el primer error
package aplicacion;
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: "+getAtrib1());
}
public int getAtrib1(){
return atributo1;
}
}
Segundo error:
El error literal es
"no se puede hacer referencia a un método no estático o de instancia desde un método estático o de clase".Esto es debido a que desde el método
main que es de
clase o estático el cual no va asociado a un objeto se intenta acceder a un método de
instancia que si va asociado a un objeto. Para solucionarlo la forma más rápida convertir el método
getAtrib1 en estático así no hara falta instanciarlo para poder utilizarlo.
Este es el código tras corregir el segundo error
package aplicacion;
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: "+ getAtrib1());
}
public static int getAtrib1(){
return atributo1;
}
}
Último error:
El error literal es
"no se puede hacer referencia a una propiedad no estática desde un método estático".
Esto es debido a que se está intentando acceder a un atributo de instancia desde un método de clase o estático, para solucionarlo hay que declarar la propiedad como estática.
Este es el código tras corregir el último error
package aplicacion;
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());
}
public static int getAtrib1(){
return atributo1;
}
}
Ejecución del programa
Mensaje 1
Atributo 1 vale: 0
Saludos