what is static keyword java
Este tutorial explica la palabra clave estática en Java y su uso en variables, métodos, bloques y clases. También establece la diferencia entre miembros estáticos y no estáticos:
Java admite varios tipos de declaraciones para indicar el alcance y el comportamiento de sus variables, métodos, clases, etc. Por ejemplo, la palabra clave final, seal, static, etc. Todas estas declaraciones tienen un significado específico cuando se utilizan en el programa Java.
Exploraremos todas estas palabras clave a medida que avancemos con este tutorial. Aquí, discutiremos los detalles de una de las palabras clave más importantes en Java, es decir, 'estática'.
Lo que vas a aprender:
- Palabra clave estática en Java
- Conclusión
Palabra clave estática en Java
Un miembro de un programa Java se puede declarar como estático usando la palabra clave 'estática' antes de su declaración / definición. Cuando un miembro se declara estático, esencialmente significa que el miembro es compartido por todas las instancias de una clase sin hacer copias de por instancia.
Por lo tanto, static es un modificador que no es de clase utilizado en Java y se puede aplicar a los siguientes miembros:
- Variables
- Métodos
- Bloques
- Clases (más específicamente, clases anidadas)
Cuando un miembro se declara estático, se puede acceder a él sin utilizar un objeto. Esto significa que antes de crear una instancia de una clase, el miembro estático está activo y accesible. A diferencia de otros miembros de clase no estáticos que dejan de existir cuando el objeto de la clase sale del alcance, el miembro estático todavía está obviamente activo.
Variable estática en Java
Una variable miembro de una clase que se declara estática se denomina Variable estática. También se denomina 'variable de clase'. Una vez que la variable se declara como estática, la memoria se asigna solo una vez y no cada vez que se crea una instancia de una clase. Por lo tanto, puede acceder a la variable estática sin una referencia a un objeto.
El siguiente programa Java describe el uso de variables estáticas:
|_+_|Producción:
En el programa anterior, tenemos dos variables estáticas, es decir, ay b. Modificamos estas variables en una función “printStatic” así como en “main”. Tenga en cuenta que los valores de estas variables estáticas se conservan en las funciones incluso cuando finaliza el alcance de la función. La salida muestra los valores de las variables en dos funciones.
¿Por qué necesitamos variables estáticas y dónde son útiles?
Las variables estáticas son más útiles en aplicaciones que necesitan contadores. Como sabe, los contadores darán valores incorrectos si se declaran como variables normales.
Por ejemplo, si tiene una variable normal configurada como contador en una aplicación que tiene una clase, digamos car. Luego, cada vez que creamos un objeto de automóvil, la variable de contador normal se inicializará con cada instancia. Pero si tenemos una variable de contador como variable estática o de clase, se inicializará solo una vez cuando se cree la clase.
Posteriormente, con cada instancia de la clase, este contador se incrementará en uno. Esto es diferente a la variable normal en la que con cada instancia el contador se incrementará pero el valor del contador siempre será 1.
Por lo tanto, incluso si crea cien objetos de la clase car, entonces el contador como variable normal siempre tendrá el valor como 1 mientras que, con una variable estática, mostrará el recuento correcto de 100.
A continuación se muestra otro ejemplo de contadores estáticos en Java:
|_+_|Producción:
El funcionamiento de la variable estática es evidente en el programa anterior. Hemos declarado la variable estática count con valor inicial = 0. Luego, en el constructor de la clase, incrementamos la variable estática.
En la función principal, creamos tres objetos del contador de clases. La salida muestra el valor de la variable estática cada vez que se crea el objeto contador. Vemos que con cada objeto creado, el valor de la variable estática existente se incrementa y no se reinicializa.
Método estático de Java
Un método en Java es estático cuando está precedido por la palabra clave 'estático'.
Algunos puntos que debe recordar sobre el método estático incluyen:
mejor software de monitoreo de temperatura windows 10
- Un método estático pertenece a la clase frente a otros métodos no estáticos que se invocan utilizando la instancia de una clase.
- Para invocar un método estático, no necesita un objeto de clase.
- Los miembros de datos estáticos de la clase son accesibles al método estático. El método estático puede incluso cambiar los valores del miembro de datos estáticos.
- Un método estático no puede tener una referencia a 'este' o 'super' miembros. Incluso si un método estático intenta referirlos, será un error del compilador.
- Al igual que los datos estáticos, el método estático también puede llamar a otros métodos estáticos.
- Un método estático no puede hacer referencia a variables o miembros de datos no estáticos y tampoco puede llamar a métodos no estáticos.
El siguiente programa muestra la implementación del método estático en Java:
|_+_|Producción:
Esta es una simple ilustración. Definimos un método estático que simplemente imprime un mensaje. Luego, en la función principal, se llama al método estático sin ningún objeto o instancia de una clase.
Otro ejemplo de implementación de palabras clave estáticas en Java.
|_+_|En el programa anterior, como puede ver, tenemos dos métodos. El método printStatic es un método estático, mientras que inst_print es un método de instancia. También tenemos dos variables, static_count es una variable estática y b es una variable de instancia.
En el método estático - printStatic, primero mostramos un mensaje y luego intentamos cambiar el valor de la variable de instancia by también llamamos al método no estático.
preguntas y respuestas de la entrevista j2ee para experimentados
A continuación, intentamos utilizar la palabra clave 'super'.
b = 20;
inst_print ();
System.out.println (super.count_static);
Cuando ejecutamos el programa con las líneas anteriores, obtenemos errores de compilación por usar variables de instancia, llamar a métodos no estáticos y hacer referencia a super en un contexto estático. Estas son las limitaciones del método estático.
Cuando comentamos las tres líneas anteriores, solo entonces el programa anterior funciona bien y produce el siguiente resultado.
Producción:
Sobrecarga y anulación del método estático
Como todos saben, tanto la sobrecarga como la anulación son las características de OOPS y ayudan en el polimorfismo. La sobrecarga se puede clasificar como polimorfismo en tiempo de compilación, donde puede tener métodos con el mismo nombre pero diferentes listas de parámetros.
La anulación es una característica del polimorfismo en tiempo de ejecución y, en este caso, el método de la clase base se anula en la clase derivada para que la firma o el prototipo del método sea el mismo pero la definición difiera.
Analicemos cómo la sobrecarga y la anulación afectan la clase estática en Java.
Sobrecarga
Puede sobrecargar un método estático en Java con diferentes listas de parámetros pero con el mismo nombre.
El siguiente programa muestra sobrecarga:
|_+_|Producción:
Este programa tiene dos métodos estáticos con el mismo nombre 'static_method' pero una lista de argumentos diferente. El primer método no toma ningún argumento y el segundo método toma un argumento de cadena.
Un punto a tener en cuenta es que no se puede sobrecargar el método simplemente dependiendo de la palabra clave 'estática'. Por ejemplo, si tiene un método de instancia 'suma' y si define otro método 'suma' y lo declara como estático, entonces no funcionará. Este intento de sobrecarga basado en una palabra clave 'estática' dará como resultado un error de compilación.
Primordial
Como los métodos estáticos se invocan sin ningún objeto de la clase, incluso si tiene un método estático con la misma firma en la clase derivada, no se anulará. Esto se debe a que no hay polimorfismo en tiempo de ejecución sin una instancia.
Por lo tanto, no puede anular un método estático. Pero si hay un método estático con la misma firma en la clase derivada, entonces el método a llamar no depende de los objetos en tiempo de ejecución, sino del compilador.
Debe tener en cuenta que, aunque los métodos estáticos no se pueden anular, el lenguaje Java no da ningún error de compilador cuando tiene un método en la clase derivada con la misma firma que un método de clase base.
La siguiente implementación prueba este punto.
|_+_|Producción:
En el programa anterior, puede ver que el método estático que se llama no depende del objeto al que apunta el puntero. Esto se debe a que los objetos no se utilizan en absoluto con métodos estáticos.
Bloque estático en Java
Así como también tiene bloques de función en lenguajes de programación como C ++, C #, etc. en Java, existe un bloque especial llamado bloque “estático” que generalmente incluye un bloque de código relacionado con datos estáticos.
Este bloque estático se ejecuta en el momento en que se crea el primer objeto de la clase (precisamente en el momento de la carga de la clase) o cuando se utiliza el miembro estático dentro del bloque.
El siguiente programa muestra el uso de un bloque estático.
|_+_|Producción:
Tenga en cuenta el orden de ejecución de las declaraciones en el programa anterior. El contenido del bloque estático se ejecuta primero y luego el programa principal. Las variables estáticas sum y val1 tienen valores iniciales, mientras que val2 no está inicializado (por defecto es 0). Luego, en el bloque estático val2 todavía no se le asigna un valor y, por lo tanto, su valor se muestra como 0.
A la variable val2 se le asigna un valor después de la impresión en el bloque estático y la suma se vuelve a calcular. Por lo tanto, en la función principal, obtenemos diferentes valores de suma y val2.
Si especifica un constructor, el contenido del bloque estático se ejecuta incluso antes que el constructor. Los bloques estáticos se utilizan principalmente para inicializar miembros estáticos de la clase y otra inicialización relacionada con miembros estáticos.
Clase estática de Java
En Java, tiene bloques estáticos, métodos estáticos e incluso variables estáticas. Por lo tanto, es obvio que también puede tener clases estáticas. En Java, es posible tener una clase dentro de otra clase y esto se denomina clase anidada. La clase que encierra la clase anidada se denomina clase Outer.
En Java, aunque puede declarar una clase anidada como estática, no es posible tener la clase externa como estática.
Exploremos ahora las clases anidadas estáticas en Java.
Clase anidada estática en Java
Como ya se mencionó, puede tener una clase anidada en Java declarada como estática. La clase anidada estática difiere de la clase anidada no estática (clase interna) en ciertos aspectos que se enumeran a continuación.
A diferencia de la clase anidada no estática, la clase estática anidada no necesita una referencia de clase externa.
Una clase anidada estática puede acceder solo a los miembros estáticos de la clase externa en comparación con las clases no estáticas que pueden acceder a los miembros estáticos y no estáticos de la clase externa.
A continuación se muestra un ejemplo de una clase anidada estática.
|_+_|Producción:
En el programa anterior, verá que la clase anidada estática puede acceder a la variable estática (cadena) desde la clase externa.
Importación estática en Java
Como sabe, normalmente incluimos varios paquetes y funciones predefinidas en el programa Java mediante la directiva 'import'. El uso de la palabra estática con la directiva de importación le permite usar la funcionalidad de la clase sin usar el nombre de la clase.
Ejemplo:
|_+_|Producción:
En este programa, usamos la importación estática para la clase java.lang.System.
Nota: En la función principal, acabamos de usar out.println para mostrar el mensaje.
Aunque la función de importación estática hace que el código sea más conciso y legible, a veces crea ambigüedad, especialmente cuando algunos paquetes tienen las mismas funciones. Por lo tanto, la importación estática debe usarse solo cuando sea extremadamente necesario.
cómo eliminar un valor de una matriz de Java
Estático vs no estático
Analicemos las principales diferencias entre los miembros estáticos y no estáticos de Java.
A continuación se enumeran las diferencias entre Variables estáticas y no estáticas .
Variables estáticas | Variables no estáticas |
---|---|
Se puede acceder usando solo el nombre de la clase. | Requiere objetos de una clase para acceder. |
Son accesibles tanto para métodos estáticos como no estáticos. | Son accesibles solo para métodos no estáticos. |
Una memoria para variable estática se asigna solo una vez por clase. | Se asigna una memoria para variables no estáticas por objeto. |
Compartido por todos los objetos de la clase. | Se realiza una copia de variable por objeto. |
Tiene alcance global y está disponible para todos los métodos y bloques. | Tiene alcance local y es visible para los objetos de la clase. |
A continuación se muestra la diferencia entre los métodos estáticos y no estáticos .
Métodos estáticos | Métodos no estáticos |
---|---|
Un método que está precedido por una palabra clave estática y está disponible a nivel de clase. | Un método no precedido por una palabra clave estática y disponible para cada una de las instancias de la clase. |
Admite enlace anticipado o en tiempo de compilación. | Admite enlace dinámico o en tiempo de ejecución. |
Solo puede acceder a datos estáticos miembros de su clase y cualquier otra clase. | Puede acceder a miembros estáticos y no estáticos de la clase y otras clases. |
Los métodos estáticos no se pueden anular. | Puede anularse. |
La memoria se asigna solo una vez. Por tanto, la memoria utilizada es menor. | El consumo de memoria es mayor ya que la memoria se asigna cada vez que se invoca el método. |
Estático vs final
Static y Final son dos palabras clave en Java que pueden dar un significado especial a la entidad con la que se usa. Por ejemplo, cuando una variable se declara estática, se convierte en una variable de clase a la que se puede acceder sin una referencia al objeto.
De manera similar, cuando una variable se declara como final, se vuelve inmutable, es decir, una constante.
Tabularicemos algunas de las principales diferencias entre las palabras clave estáticas y finales en Java.
Estático | Final |
---|---|
Un miembro de datos estáticos (clase anidada, variable o método) es un miembro de datos precedido por una palabra clave estática y se puede acceder a él sin un objeto. | La palabra clave final se puede aplicar a una variable, método, clase, etc. e impone restricciones a las entidades. |
No es obligatorio inicializar la variable estática con valor durante la declaración. | Se requiere que la variable final se inicialice a un valor en el momento de la declaración |
Puede reinicializar las variables estáticas. | No es posible reinicializar las variables finales. |
Los métodos estáticos son aquellos que solo pueden acceder a miembros estáticos. | Los métodos finales son los métodos que no se pueden heredar / anular. |
Las clases estáticas son clases cuyos objetos no se pueden crear. | Las clases finales son clases que no se pueden heredar. |
Preguntas frecuentes
P # 1) ¿Puede la clase Java ser estática?
Responder: Sí, una clase en Java puede ser estática, siempre que no sea la clase externa. Esto significa que solo las clases anidadas en Java pueden ser estáticas.
P # 2) ¿Cuándo debería usar Static en Java?
Responder: Siempre que desee un miembro de datos en su programa que deba mantener su valor en todos los objetos, debe usar static. Por ejemplo, un contador. Un método puede declararse como estático cuando no desea invocarlo mediante un objeto.
P # 3) ¿Puede una clase estática tener un constructor?
Responder: Sí, una clase estática puede tener un constructor y su propósito es únicamente inicializar miembros de datos estáticos. Se invocará solo por primera vez cuando se acceda a los miembros de datos. No se invocará para un acceso posterior.
P # 4) ¿Cuál es el uso de Static Constructor?
Responder: En general, el constructor se usa para inicializar miembros de datos estáticos. También se utiliza para realizar operaciones / acciones que deben realizarse solo una vez.
P # 5) ¿Los métodos estáticos se heredan en Java?
Responder: Sí, los métodos estáticos en Java se heredan pero no se anulan.
Conclusión
En este tutorial, discutimos la palabra clave estática de Java en detalle junto con su uso en miembros de datos, métodos, bloques y clases. La palabra clave estática es una palabra clave que se utiliza para indicar el nivel de clase o el alcance global.
No es necesario que acceda a miembros estáticos mediante instancias de la clase. Puede acceder directamente a los miembros de datos estáticos utilizando el nombre de la clase. También discutimos las principales diferencias entre miembros estáticos y no estáticos, así como palabras clave estáticas y finales.
En los temas siguientes, exploraremos más palabras clave y su significado en el lenguaje Java.
Lectura recomendada
- Estático en C ++
- Tutorial de interfaz Java y clase abstracta con ejemplos
- Implementación de Java: creación y ejecución de un archivo JAR de Java
- Máquina virtual Java: cómo JVM ayuda a ejecutar aplicaciones Java
- Conceptos de C #: constructor, destructor, clase estática, estructura y enumeración
- Modificadores de acceso en Java: tutorial con ejemplos
- Tutorial de reflexión de Java con ejemplos
- Introducción al lenguaje de programación Java - Tutorial en vídeo