Autor Tema: Java. Métodos de clase o static y métodos de instancia. Implicaciones CU00683B  (Leído 3290 veces)

dferna

  • Sin experiencia
  • *
  • Mensajes: 25
    • Ver Perfil
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:
Citar
Solucionar los errores de compilación de la siguiente clase

Código: [Seleccionar]
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;
}
}

Citar
¿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?

Citar
¿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.

Citar
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
Código: [Seleccionar]
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;
}
}

Citar
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.

Citar
Este es el código tras corregir el segundo error
Código: [Seleccionar]
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;
}
}

Citar
Ú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.

Citar
Este es el código tras corregir el último error
Código: [Seleccionar]
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
Citar
Mensaje 1
Atributo 1 vale: 0

Saludos  :)
« Última modificación: 21 de Junio 2017, 17:59 por Alex Rodríguez »

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Hola dferna.

Tu ejercicio está bien resuelto, te dejo un enlace con otra posible solución.

https://www.aprenderaprogramar.com/foros/index.php?topic=2354.msg11208#msg11208

Saludos. ;D

mithrandir

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 6
    • Ver Perfil
Re:Java. Métodos de clase o static y métodos de instancia. CU00683B
« Respuesta #2 en: 24 de Mayo 2017, 18:17 »
Buenas!!!

Como le doy "like" a esta publicacion!!! fenomenal la respuesta y solución al problema de compilación.

Ahora tengo una curiosidad...éste mismo error de "non-static" en contextos estáticos me ha salido cuando trabajo Android Studio, si tenemos en cuenta aquí en el ejemplo tenemos una sola clase que la convertimos toda a estática, pero ésta clase no se relaciona con otras. Ahora traslademos el caso a Android Studio, ¿en qué me repercute que cambie unos métodos de una clase de "non-static" a estaticos a sabiendas que dicha clase que acabo de cambiar se relaciona con otras?

PD: sugeriría que añadieran el curso de Android Studio a ésta excelente página.

gracias.


Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Hola mithrandir, para conocer cuestiones de detalle te recomiendo seguir el curso básico de java si no lo has hecho, disponible en http://aprenderaprogramar.com/index.php?option=com_content&view=category&id=68&Itemid=188

El uso de métodos estáticos o no estáticos depende del diseño que estemos llevando a cabo. El cambio puede tener implicaciones incluso hacer que una aplicación deje de funcionar.

Nos apuntamos tu sugerencia para incluir más contenidos en la web (como pudiera ser el caso de Android), cosa que haremos en función de nuestras posibilidades. Ofrecer contenidos gratuitos de calidad implica un gran esfuerzo. Mantener la web y los foros no sería posible sin la colaboración y esfuerzo de diversas personas como tú mismo puedes ver.

Saludos

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".