Las variables estáticas, también llamadas variables globales, son piezas de datos que no están afiliadas a una instancia particular de una clase. Solo puede existir un valor para estas variables independientemente del número de objetos de clase que se creen. Dependiendo del contexto, las variables estáticas pueden ser más flexibles o más restrictivas que sus contrapartes de variables de instancia, que tienen sus propios valores discretos para cada objeto específico de un tipo de clase. En los lenguajes de programación orientados a objetos, las buenas prácticas de programación generalmente dictan que el uso de objetos, métodos o variables estáticos se mantenga al mínimo, pero tienen aplicaciones útiles.
Una de las principales razones por las que las variables estáticas se consideran restrictivas a veces es que no puede existir más de un valor para una variable. Cualquier asignación a la variable sobrescribe la anterior y se pierde cualquier información del valor anterior. Sin varias copias de la variable, no se pueden almacenar varios valores de datos. Si se cambia el valor, todos los objetos que afecten deben funcionar con el nuevo valor, y si el valor anterior no estaba destinado a ser eliminado, el cambio podría resultar perjudicial para cada objeto de instancia de un tipo de clase particular. A menos que la variable esté bloqueada de alguna manera en la creación, el riesgo de cambios imprevistos y el consiguiente caos que podría causar en los objetos hace que algunos programadores eviten las variables estáticas siempre que sea posible.
Las variables estáticas a veces pueden considerarse flexibles por la misma razón por la que pueden llamarse restrictivas. Incluso si el valor de una variable no está bloqueado, los cambios planificados en su valor pueden tener efectos positivos. Se garantiza que una variable que se comparte entre todos los objetos de una clase es coherente y se puede utilizar tanto dentro como fuera de la clase con la confianza de que su valor es siempre el mismo. Las variables que son estáticas tienen una variedad de aplicaciones útiles, sobre todo en el mantenimiento de constantes y la implementación de serialización. Java, en particular, se basa en gran medida en este mecanismo de serialización estática.
Hay ciertas reglas generales que los programadores suelen utilizar al implementar variables estáticas. Por lo general, estas variables funcionan mejor como valores de datos pequeños porque los objetos estáticos grandes pueden hacer que un programa sea mucho más rígido de lo que debe ser. Los valores de datos pequeños se pueden cambiar rápida y fácilmente sin demasiado temor a introducir errores. Los objetos estáticos grandes requieren más tiempo y esfuerzo para cambiar y también son más propensos a que se introduzca un error que interrumpiría todos los objetos de clase. Estas son pautas, no reglas inquebrantables, y puede haber usos para variables pequeñas y grandes, según el programa.