Error: No se puede hacer referencia al recuento de variables no estáticas desde un contexto estático en Java

Sheeraz Gul 12 octubre 2023
Error: No se puede hacer referencia al recuento de variables no estáticas desde un contexto estático en Java

Este tutorial demuestra el error: no se puede hacer referencia al recuento de variables no estáticas desde un contexto estático en Java.

el Error: no se puede hacer referencia al recuento de variables no estáticas desde un contexto estático en Java

La mayoría de las veces, el “error: no se puede hacer referencia al recuento de variables no estáticas desde un contexto estático” ocurre cuando intentamos usar una variable miembro no estática en el método principal porque el método main() es estático y es invocado automáticamente. No necesitamos crear un objeto para invocar el método main().

Para comprender el error: no se puede hacer referencia al recuento de variables no estáticas desde un contexto estático, primero, debemos comprender el concepto de métodos estáticos y no estáticos.

Métodos estáticos

Los métodos estáticos pertenecen a una clase pero no a la instancia de esa clase. El método estático se llama sin la instancia u objeto de la clase.

Los métodos estáticos solo pueden acceder a las variables estáticas y otros miembros de los métodos estáticos de su clase y otras clases. Los métodos estáticos no pueden acceder a los miembros no estáticos de una clase.

Métodos no estáticos

Cualquier método que no contenga una palabra clave Static es un método no estático. Los métodos no estáticos pueden acceder a las variables y miembros estáticos y no estáticos de la misma clase o de otra clase.

Los métodos no estáticos también pueden cambiar el valor de los datos estáticos.

Ejemplo de métodos estáticos y no estáticos en Java

Probemos un ejemplo para demostrar métodos estáticos y no estáticos.

package delftstack;

class DelftstackDemo {
  // non-static variable
  int Demo;

  // Static method
  public static void increment() {
    // Using a Non-Static Variable in Static Method. Error
    Demo++;
  }
}

public class Example {
  // Static Main method
  public static void main(String args[]) {
    DelftstackDemo Demo1 = new DelftstackDemo();
    DelftstackDemo Demo2 = new DelftstackDemo();
    DelftstackDemo Demo3 = new DelftstackDemo();

    Demo1.Demo = 7;
    Demo2.Demo = 8;
    Demo3.Demo = 9;

    // Calling the method
    DelftstackDemo.increment();

    System.out.println(Demo1.Demo);
    System.out.println(Demo2.Demo);
    System.out.println(Demo3.Demo);
  }
}

El código anterior tiene dos clases. En la primera clase, el código usa una variable miembro no estática en un método estático y la segunda clase intenta cambiar los valores del miembro no estático de la instancia en el método principal.

El código arrojará un error.

Exception in thread "main" java.lang.Error: Unresolved compilation problem:
	Cannot make a static reference to the non-static field Demo

	at delftstack.DelftstackDemo.increment(Example.java:12)
	at delftstack.Example.main(Example.java:29)

El código anterior arroja el error porque se usa un miembro no estático Demo en el método estático. Cambiar el método incremento a no estático y llamarlo con la instancia de primera clase resolverá el problema.

Ver solución:

package delftstack;

class DelftstackDemo {
  // non-static variable
  int Demo;

  // change to a non-static method
  public void increment() {
    // No error
    Demo++;
  }
}

public class Example {
  // Static Main method
  public static void main(String args[]) {
    DelftstackDemo Demo1 = new DelftstackDemo();
    DelftstackDemo Demo2 = new DelftstackDemo();
    DelftstackDemo Demo3 = new DelftstackDemo();

    Demo1.Demo = 7;
    Demo2.Demo = 8;
    Demo3.Demo = 9;

    // Calling the method
    Demo1.increment();

    System.out.println(Demo1.Demo);
    System.out.println(Demo2.Demo);
    System.out.println(Demo3.Demo);
  }
}

Ahora estamos usando un miembro no estático en el método no estático y llamando a un método no estático en el estático principal por la instancia de la primera clase. Resuelve el problema.

Ver salida:

8
8
9
Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook

Artículo relacionado - Java Error