Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: LuisM en 02 de Agosto 2017, 23:53

Título: non-static method cannot be referenced from static context Java error CU00683B
Publicado por: LuisM en 02 de Agosto 2017, 23:53
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
Título: Re:non-static method cannot be referenced from static context Java error CU00683B
Publicado por: Alex Rodríguez en 22 de Agosto 2017, 19:50
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