logo

Por qué no se puede hacer referencia a una variable no estática desde un contexto estático en Java

El error No se puede hacer referencia a una variable no estática desde un contexto estático en Java Lo enfrentan principalmente los principiantes al momento de compilar el programa Java. La razón por la que ocurre este error es que usan una variable miembro no estática en el método main(). Debido a que el método main() en Java es un método estático y se invoca automáticamente, no necesitamos crear un objeto para invocarlo. Para entender el error, primero debemos entender el estático y no estático método en java .

Método estático

En Java , los métodos públicos pertenecen a una instancia de clase pero si hablamos de método estático , pertenecen a una clase, no a una instancia de una clase. No es necesario crear una instancia de la clase para invocar un método estático. El miembro estático sólo puede acceder al miembro de datos estáticos y puede cambiar su valor.

Método no estático

Todos los métodos sin tener estático La palabra clave antes del nombre del método se conoce como No estático métodos. No es necesario crear una instancia de la clase para acceder al método estático y a la variable estática. Los métodos no estáticos se utilizan como enlace dinámico o en tiempo de ejecución. A diferencia de estático método, podemos anular el no estático método.

Creemos un programa Java y generemos el mismo error.

conectividad java

En el siguiente ejemplo, hemos declarado una variable privada número de tipo int antes del método main(). En el método main(), intentamos incrementar el número en 1. Cabe señalar que el método main() es un método estático y la variable no es estática. Cuando compilamos el programa anterior, obtenemos el mismo error, como se muestra a continuación.

StaticExample1.java

 public class StaticExample { private int number=0; public static void main(String args[]){ number++; System.out.println(number); } } 

Producción:

diferencia en Python
Por qué no se puede hacer referencia a una variable no estática desde un contexto estático en Java

Ahora, declaremos la variable. número como estático y compilar el código. Tenga en cuenta que tanto la variable como el método main() son estáticos.

StaticExample2.java

 class staticExample { private static int number=0; public static void main(String args[]){ number++; System.out.println(number); } } 

Producción:

Por qué no se puede hacer referencia a una variable no estática desde un contexto estático en Java

El programa se compila y ejecuta exitosamente.

leyendo desde un archivo csv en java

Cada instancia de una variable no estática tiene un valor diferente y se crea cuando el operador new() inicializa una instancia de un objeto. Las variables estáticas se crean o inicializan cuando la clase se carga en JVM .

Necesitamos una instancia de un objeto para llamar a la variable no estática. Podemos crear muchos objetos dándole diferentes valores a esa variable de instancia o no estática.

StaticExample3.java

 class variable { int number; public static void increment() { number++; } } class StaticExample { public static void main(String args[]) { variable var1 = new variable(); variable var2 = new variable(); variable var3 = new variable(); var1.number = 12; var2.number = 13; var3.number = 14; variable.increment(); System.out.println(var1.number); System.out.println(var2.number); System.out.println(var3.number); } } 

Producción:

Por qué no se puede hacer referencia a una variable no estática desde un contexto estático en Java

En el programa anterior, tres objetos, var1, var2, var3 , son creados para la clase variable y asignó los tres valores diferentes 12, 13, 14 para los objetos var1, var2 , y var3 , respectivamente. Ahora el número La propiedad de cada objeto tiene su propio valor entero. Cuando intentamos incrementar el valor de la propiedad del número llamando al método increment(), el compilador no entiende para qué valor de número el método debe incrementar el valor. El compilador enfrenta el error de ambigüedad y arroja el error en tiempo de compilación. No se puede hacer referencia a una variable no estática desde un contexto estático. .

Solución al error

Hay una forma sencilla de resolver el No se puede hacer referencia a una variable no estática desde un contexto estático. error. En el código anterior, tenemos que abordar la variable no estática con el nombre del objeto. De forma sencilla, tenemos que crear un objeto de la clase para hacer referencia a una variable no estática desde un contexto estático. Se crea una nueva copia de todas las variables no estáticas cuando se crea una nueva instancia de variable. Entonces, podemos acceder a estas variables usando la referencia de la nueva instancia de la clase. por ejemplo, considere el siguiente programa Java.

industria y fábrica

StaticExample4.java

 class staticExample { int number = 0; public static void main(String args[]) { // using non-static variable by creating an object of the class staticExample test = new staticExample(); test.number++; System.out.println(test.number);a } } 

Producción:

Por qué no se puede hacer referencia a una variable no estática desde un contexto estático en Java

Descripción

En el programa anterior, accedemos a la propiedad del número usando el nombre de la clase estáticoEjemplo. Creamos un objeto del nombre de clase StaticExample prueba e incrementar el valor del numero utilizando el objeto de prueba.