Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: 22bears en 08 de Agosto 2022, 04:51

Título: JAVA - Error non static variable cannot be refered from static context solución
Publicado por: 22bears en 08 de Agosto 2022, 04:51
Buenas noches amigos. Estoy estudiando Java y me encontré con un error (Error non static variable cannot be refered from static context) que no puedo solucionar por el momento. ¿Qué puedo hacer para solucionarlo? Gracias

Código

Código: [Seleccionar]
package Funciones2;
public class Funciones2 {
public static void main (String[] args) {

int resultado = suma(10,10,2);
System.out.println(resultado);
Coche miCoche = new Coche(); //error: Non static variable cant be referenced from a static context
miCoche.agregarPuerta();
System.out.println(miCoche.puertas);
}
public static int suma(int a, int b, int c) {
//LÓGICA
int resultado = a + b + c;
return resultado;
}

class Coche {
public int puertas=0;
public void agregarPuerta() {
this.puertas++;
}
}

}
Título: Re: JAVA - Error non static variable cannot be refered from static context
Publicado por: Kabuto en 08 de Agosto 2022, 11:33
La clase Coche la has declarado dentro de la clase Funciones2

Bien, eso no es problema. Pero, si quieres que el método estático main() tenga acceso a la clase Coche, lo has de declarar también como estático.

Es decir, declárala así:

Citar
static class Coche {
    public int puertas = 0;
    public void agregarPuertas() {
        this.puertas++;
    }
}


En Java hay tres ámbitos: Local, Global y Estático(este se combina con los otros dos)

Según el ámbito donde se encuentre una variable (o un método, o una declaración de clase..) será visible o no para otros elementos.

El método main() se encuentra en un ámbito "global" porque está declarado directamente dentro de la clase principal Funciones2.
Tu clase Coche también es de ámbito "global" por el mismo motivo.

Sin embargo, el main() además de "global", es "estático" (obligatoriamente).
Esto implica que no puede hacer referencia (no puede ver) a otros elementos si no son estáticos como él.
Esto es lo que significa el error que te sale en pantalla.

Así que no te queda otra que declarar la clase Coche como estática, para que se encuentren en el mismo ámbito.

Si hubieras escrito la clase Coche en otro archivo .java distinto, es decir, que ya no pertenezca a Funciones2, entonces no habría surgido este problema porque ya se trataría de una clase independiente.

Pero al ser un miembro de Funciones2, igual que lo es main(), entonces sí que hay que igualar sus ámbitos.

Esto de los ámbitos "estáticos" y "no estáticos", al principio resulta confuso y algo difícil entender las implicaciones.
Así que ahora mismo, tampoco te preocupes demasiado por esto. Ya lo irás aprendiendo sobre la marcha.

Solo recuerda que habrá ocasiones en las que tendrás que declarar las cosas como static para que el main() pueda verlas.

Un saludo.
Título: Re: JAVA - Error non static variable cannot be refered from static context
Publicado por: 22bears en 08 de Agosto 2022, 22:35
Gracias porque no solo me solucionaste el inconveniente, sino que de verdad me enseñaste la raíz del problema y aprendí algo nuevo gracias a tus conocimientos