inicializacion estática estatico bloque java static

estática - constructor estatico java



Bloque estático en Java (7)

El bloque estático se puede usar para mostrar que un programa también puede ejecutarse sin la función principal.

//static block //static block is used to initlize static data member of the clas at the time of clas loading //static block is exeuted before the main class B { static { System.out.println("Welcome to Java"); System.exit(0); } }

Estaba revisando un código el otro día y me encontré con:

static { ... }

Viniendo de C ++, no tenía idea de por qué estaba allí. No es un error porque el código compilado bien. ¿Qué es este bloque de código "estático"?


Es un inicializador estático . Se ejecuta cuando la clase se carga (o se inicializa, para ser precisos, pero normalmente no se nota la diferencia).

Se puede considerar como un "constructor de clase".

Tenga en cuenta que también hay inicializadores de instancias , que se ven iguales, excepto que no tienen la palabra clave static . Se ejecutan junto con el código en el constructor cuando se crea una nueva instancia del objeto.


Es un bloque de código que se ejecuta cuando la clase es cargada por un cargador de clases. Está destinado a hacer la inicialización de los miembros estáticos de la clase.

También es posible escribir inicializadores no estáticos, que parecen incluso más extraños:

public class Foo { { // This code will be executed before every constructor // but after the call to super() } Foo() { } }


Es un inicializador estático. Se ejecuta cuando se carga la clase y es un buen lugar para poner inicialización de variables estáticas.

De http://java.sun.com/docs/books/tutorial/java/javaOO/initial.html

Una clase puede tener cualquier número de bloques de inicialización estática, y pueden aparecer en cualquier parte del cuerpo de la clase. El sistema de tiempo de ejecución garantiza que los bloques de inicialización estática se llaman en el orden en que aparecen en el código fuente.

Si tiene una clase con un mapa de búsqueda estática, podría tener este aspecto

class MyClass { static Map<Double, String> labels; static { labels = new HashMap<Double, String>(); labels.put(5.5, "five and a half"); labels.put(7.1, "seven point 1"); } //... }

Es útil ya que el campo estático anterior no se pudo haber inicializado utilizando labels = ... Necesita llamar al método put de alguna manera.



Un bloque estático se ejecuta una vez en el ciclo de vida de cualquier programa, otra propiedad del bloque estático es que se ejecuta antes del método principal.


sí, el bloque estático se usa para inicializar el código y se cargará en el momento en que JVM comience a ejecutarse.

El bloque estático se usa en versiones anteriores de Java, pero en la última versión no funciona.