Autor Tema: non-static method cannot be referenced from static context Java error CU00683B  (Leído 6118 veces)

LuisM

  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 131
    • Ver Perfil
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:

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

Código: [Seleccionar]
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
« Última modificación: 18 de Agosto 2017, 19:45 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Hola LuisM, solución correcta. En este hilo hay algunos comentarios de interés: https://www.aprenderaprogramar.com/foros/index.php?topic=2354.0

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