Palabra clave estática en Java se utiliza mucho en la programación Java. La palabra clave estática de Java se utiliza para crear una variable a nivel de clase en Java. Las variables y métodos estáticos son parte de la clase, no de las instancias de la clase.
palabra clave estática en Java
Java estática la palabra clave se puede usar en cinco casos como se muestra en la imagen a continuación.
Discutiremos cuatro de ellos aquí, el quinto fue introducido en Java 8 y se ha discutido en Cambios en la interfaz de Java 8.
-
Variable estática de Java
Podemos usar la palabra clave
static
con una variable de nivel de clase. Una variable estática es una variable de clase y no pertenece al objeto/instancia de la clase. Dado que las variables estáticas son compartidas entre todas las instancias del objeto, no son seguras para subprocesos. Por lo general, las variables estáticas se usan con la palabra clave final para recursos comunes o constantes que pueden ser utilizados por todos los objetos. Si la variable estática no es privada, podemos acceder a ella conNombreDeClase.nombreVariable
// Ejemplo de variable estática private static int count; public static String str; public static final String DB_USER = "miusuario";
-
Método estático de Java
Igual que una variable estática, un método estático pertenece a la clase y no a las instancias de la clase. Un método estático solo puede acceder a variables estáticas de la clase e invocar métodos estáticos de la clase. Por lo general, los métodos estáticos son métodos de utilidad que queremos exponer para ser utilizados por otras clases sin la necesidad de crear una instancia. Por ejemplo, la clase Collections, las clases de envoltura de Java como Java Wrapper y las clases de utilidad contienen muchos métodos estáticos. El método main() que es el punto de entrada de un programa Java en sí mismo es un método estático.
// Ejemplo de método estático public static void setCount(int count) { if(count > 0) StaticExample.count = count; } // Método utilitario estático public static int addInts(int i, int...js){ int sum=i; for(int x : js) sum+=x; return sum; }
A partir de Java 8, también podemos tener métodos estáticos en interfaces. Para obtener más detalles, por favor lee Java 8 cambios en la interfaz.
-
Bloque estático de Java
El bloque estático de Java es el grupo de declaraciones que se ejecuta cuando la clase se carga en la memoria por Java ClassLoader. El bloque estático se utiliza para inicializar las variables estáticas de la clase. Principalmente se usa para crear recursos estáticos cuando se carga la clase. No podemos acceder a variables no estáticas en el bloque estático. Podemos tener varios bloques estáticos en una clase, aunque no tiene mucho sentido. El código del bloque estático se ejecuta solo una vez cuando la clase se carga en la memoria.
static{ // se puede utilizar para inicializar recursos cuando la clase se carga System.out.println("Bloque estático de ejemplo"); // solo puede acceder a variables y métodos estáticos str="Prueba"; setCount(2); }
-
Clase Estática de Java
Podemos usar la palabra clave `static` con clases anidadas. La palabra clave `static` no se puede usar con clases de nivel superior. Una clase anidada estática es igual que cualquier otra clase de nivel superior y está anidada solo por conveniencia de empaquetado. Leer: Clases Anidadas de Java
Veamos todos los usos de la palabra clave `static` en Java en un programa de ejemplo. StaticExample.java
package com.journaldev.misc;
public class StaticExample {
//bloque statico
static{
//se puede utilizar para inicializar recursos cuando la clase se carga
System.out.println("StaticExample static block");
//puede acceder solo a variables y métodos estáticos
str="Test";
setCount(2);
}
//múltiples bloques staticos en la misma clase
static{
System.out.println("StaticExample static block2");
}
//ejemplo de variable estática
private static int count; //kept private to control its value through setter
public static String str;
public int getCount() {
return count;
}
//ejemplo de método estático
public static void setCount(int count) {
if(count > 0)
StaticExample.count = count;
}
//método utilitario estático
public static int addInts(int i, int...js){
int sum=i;
for(int x : js) sum+=x;
return sum;
}
//ejemplo de clase estática: se utiliza solo por conveniencia de empaquetado
public static class MyStaticClass{
public int count;
}
}
Veamos cómo usar variable estática, método y clase estática en un programa de prueba. TestStatic.java
package com.journaldev.misc;
public class TestStatic {
public static void main(String[] args) {
StaticExample.setCount(5);
//variables estáticas no privadas se pueden acceder con el nombre de la clase
StaticExample.str = "abc";
StaticExample se = new StaticExample();
System.out.println(se.getCount());
//variables estáticas de clase e instancia son iguales
System.out.println(StaticExample.str +" is same as "+se.str);
System.out.println(StaticExample.str == se.str);
//las clases anidadas estáticas son como las clases normales de nivel superior
StaticExample.MyStaticClass myStaticClass = new StaticExample.MyStaticClass();
myStaticClass.count=10;
StaticExample.MyStaticClass myStaticClass1 = new StaticExample.MyStaticClass();
myStaticClass1.count=20;
System.out.println(myStaticClass.count);
System.out.println(myStaticClass1.count);
}
}
La salida del ejemplo de programa anterior con la palabra clave `static` en Java es:
StaticExample static block
StaticExample static block2
5
abc is same as abc
true
10
20
Observa que el código del bloque estático se ejecuta primero y solo una vez tan pronto como la clase se carga en la memoria. Las demás salidas son autoexplicativas.
Importación estática en Java
Normalmente accedemos a los miembros estáticos utilizando la referencia de la clase, desde Java 1.5 podemos utilizar la importación estática de Java para evitar la referencia de clase. A continuación, se muestra un ejemplo simple de importación estática en Java.
package com.journaldev.test;
public class A {
public static int MAX = 1000;
public static void foo(){
System.out.println("foo static method");
}
}
package com.journaldev.test;
import static com.journaldev.test.A.MAX;
import static com.journaldev.test.A.foo;
public class B {
public static void main(String args[]){
System.out.println(MAX); //normally A.MAX
foo(); // normally A.foo()
}
}
Observa las declaraciones de importación, para la importación estática debemos usar import static
seguido del miembro estático completamente clasificado de una clase. Para importar todos los miembros estáticos de una clase, podemos usar * como en import static com.journaldev.test.A.*;
. Deberíamos usarlo solo cuando estemos utilizando la variable estática de una clase varias veces, no es bueno para la legibilidad. Actualización: Recientemente he creado un video para explicar la palabra clave estática en Java, deberías verlo a continuación. https://www.youtube.com/watch?v=2e-l1vb\_fwM
Source:
https://www.digitalocean.com/community/tutorials/static-keyword-in-java