2011-07-28 24 views
5

Lo queJava cuestión de sintaxis

static{ 
    //something 
} 

declara dentro de un cuerpo de definición de clase significa?

public class A extends B{ 
    static { 
      C.register(new C(A.class, 
        (byte) D.x.getCode()) { 
         public DataSerializable newInstance() { 
           return new A(); 
         } 
        } 
       ); 
    } 
} 

Respuesta

6

El bloque static se llama un "bloque de inicialización estática." Es muy similar a un constructor normal, excepto que solo puede inicializar variables estáticas.

Lo he encontrado útil cuando la inicialización de alguna variable estática puede arrojar una excepción que le gustaría manejar o al menos iniciar sesión. Es especialmente útil en la inicialización de variables finales estáticas.

Usted puede leer más sobre bloques de inicialización estática aquí: Initializing Fields

3

se ejecuta un bloque de código sin necesidad de una instancia de esta clase, es decir, tan pronto como el cargador de clases carga la clase.

+0

respuesta @Jack 's más el suyo haría que la mejor respuesta. – Marcelo

1

Es un inicializador estático. Le permite especificar cosas que suceden en el momento en que se carga la clase, antes de que se cree cualquier instancia.

Si se produce una excepción desde un inicializador estático es muy confuso, es difícil saber de dónde vino. Cualquier cosa que hagas en un inicializador estático debería tener un try-catch alrededor y hacer que la excepción se logre. Es una buena característica de lenguaje para evitar si puedes.

2

Es un inicializador estático. Se ejecuta una vez que se carga la clase y sus resultados se pueden almacenar en miembros estáticos. Se usa para inicializar miembros estáticos que requieren más que el nuevo Xyz() (como Listas o Mapas) ...

1

Significa que tendrá esta sección que está dentro del bloque estático procesada PRIMERO con la carga de la clase en la JVM.

ejecutar el siguiente programa simple podría hacer las cosas más claras

public class Test123 { 
    static{ 
    System.out.println("Hello from static block"); 
    } 

    public static void main(String[] args) { 
    System.out.println("In main"); 
    } 
} 

La salida de lo anterior será

Hello from static block 
In main