En lenguajes de programación como C , C++ , Objective-C y Java , static
es una palabra reservada que controla tanto la vida útil (como una variable estática ) como la visibilidad (dependiendo del enlace ). El efecto de la palabra clave varía según los detalles del lenguaje de programación específico.
En C y C++, el efecto de la static
palabra clave depende de dónde ocurre la declaración.
static
puede actuar como una clase de almacenamiento (que no debe confundirse con clases de programación orientada a objetos ), como puede y extern
( que también son palabras reservadas). Cada variable y función tiene una de estas clases de almacenamiento; Si una declaración no especifica la clase de almacenamiento, se utiliza un valor predeterminado dependiente del contexto:auto
register
extern
para todas las declaraciones de nivel superior en un archivo fuente,auto
para variables declaradas en cuerpos de funciones.En estos idiomas, el término "variable estática" tiene dos significados que son fáciles de confundir:
static
.Las variables con clase de almacenamiento extern
, que incluyen variables declaradas en el nivel superior sin una clase de almacenamiento explícita, están static
en el primer significado pero no en el segundo.
Una variable declarada static
en el nivel superior de un archivo fuente (fuera de cualquier definición de función) solo es visible en todo ese archivo (" alcance del archivo ", también conocido como " enlace interno "). En este uso, la palabra clave static
se conoce como " especificador de acceso ".
De manera similar, una función estática, una función declarada en static
el nivel superior de un archivo fuente (fuera de cualquier definición de clase), solo es visible en todo ese archivo (" alcance del archivo ", también conocido como " enlace interno ").
Las variables declaradas static
dentro de una función se asignan estáticamente, por lo que mantienen su ubicación en la memoria durante toda la ejecución del programa, mientras tienen el mismo alcance de visibilidad que las variables locales automáticas ( auto
y register
), lo que significa que permanecen locales para la función. Por lo tanto, cualquier valor que la función ponga en sus variables locales estáticas durante una llamada seguirá estando presente cuando se vuelva a llamar a la función.
En C++ , las variables miembro declaradas como static
definiciones de clase internas son variables de clase (compartidas entre todas las instancias de clase, a diferencia de las variables de instancia ).
De manera similar, una función miembro estática (una función miembro declarada static
dentro de una definición de clase) debe ser relevante para todas las instancias de una clase en lugar de para cualquier instancia específica. Una función miembro declarada como static
se puede llamar sin crear una instancia de la clase.
Esta palabra clave static
significa que este método ahora es un método de clase ; se llamará a través del nombre de la clase en lugar de a través de un objeto.
Un método estático normalmente se llama como <classname>.methodname()
, mientras que un método de instancia normalmente se llama como <objectname>.methodname()
.