Variables locales: se declaran y existen solo en el cuerpo de un método o bloque, no se inicializan automáticamente. Utilizar una variable local no inicializada provoca un error de compilación.
Variables de instancia (campos no static): pertenecen a cada objeto por separado, se inicializan al crear una instancia del objeto.
Variables estáticas (static fields): son comunes para todas las instancias de la clase, existen en una única instancia para toda la clase. Su modificación en un objeto es visible en todos los demás objetos de esa clase.
public class Example { private int instanceVar; // variable de instancia private static int staticVar; // variable estática public void foo() { int localVar = 0; // variable local } }
¿Pueden las variables estáticas ser privadas y cómo son vistas entre diferentes instancias de la clase?
Respuesta: Sí, las variables estáticas pueden ser privadas. Su modificación se refleja en todas las instancias de la clase, ya que pertenecen a la clase y no al objeto.
public class MyClass { private static int counter = 0; public MyClass() { counter++; } public static int getCounter() { return counter; } }
La creación de varias instancias de MyClass aumentará el mismo contador.
Historia
En una aplicación empresarial, el desarrollador colocó erróneamente el estado del usuario en un campo static. Esto llevó a que los usuarios "vieran" los datos de otros en un entorno multipusuario.
Historia
Al escribir una aplicación multihilo, se utilizó una variable de instancia dentro de un método static sin la debida sincronización. Esto provocó condiciones de carrera y resultados inesperados.
Historia
El desarrollador decidió utilizar una variable local en lugar de un campo de clase para almacenar un resultado intermedio. La variable se destruía al salir del método, y el programa siempre devolvía null, lo que no se detectó de inmediato en las pruebas.