¿Qué es este bloque estático después de la declaración de variables?

Nunca había visto esto antes, ¿cómo se llama? Esta es una variable de nivel de clase, al principio del archivo.

Para que quede claro, me refiero a la static {} después de la variable.

private static final UriMatcher URI_MATCHER;
    static {
        URI_MATCHER = new UriMatcher(UriMatcher.NO_MATCH);
        URI_MATCHER.addURI(AUTHORITY, SearchManager.SUGGEST_URI_PATH_QUERY, SEARCH);
        URI_MATCHER.addURI(AUTHORITY, SearchManager.SUGGEST_URI_PATH_QUERY + "/*", SEARCH);
        URI_MATCHER.addURI(AUTHORITY, "books", BOOKS);
        URI_MATCHER.addURI(AUTHORITY, "books/#", BOOK_ID);
    }

preguntado el 22 de mayo de 12 a las 19:05

5 Respuestas

es una estática inicialización cuadra. Puede declararse en cualquier lugar dentro de una clase (pero fuera de un método), pero por convención generalmente se escribe justo después de la variable estática que se inicializa. Está especificado en la Especificación del lenguaje Java, sección §8.7.

Como su nombre lo indica, normalmente se usa para inicializar el estado de los atributos estáticos en la clase en el momento de la carga de la clase. Desde el Tutorial de Java:

Un bloque de inicialización estático es un bloque normal de código encerrado entre llaves, { }, y precedido por la palabra clave estática (...) Una clase puede tener cualquier número de bloques de inicialización estáticos 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áticos se llamen en el orden en que aparecen en el código fuente.

contestado el 22 de mayo de 12 a las 19:05

que se utiliza para inicializar variables estáticas. Como sabe, no puede inicializarlos en el constructor de su clase, por lo que puede usar static bloque Como ejemplo: desea llenar una matriz estática con el valor 1, 2, 3 y así sucesivamente. Hay dos formas:

public class Main {
    static int[] array1 = {1, 2, 3, 4 ...};

    static int[] array2;
    static {
        array2 = new int[N];
        for (int i = 0; i < N; i++) {
            array2[i] = i;
        }
    }
}

contestado el 22 de mayo de 12 a las 19:05

Podría ayudar si asigna un valor de matriz a array2 primero :-) - rsp

Esta es una parte estática del código que inicializa la variable estática URI_MATCHER después de declararla

contestado el 22 de mayo de 12 a las 19:05

Se trata de un bloque de inicialización estático. Te permite "configurar" tus campos estáticos, lo que no se puede hacer correctamente en los métodos de la clase. casos.

contestado el 22 de mayo de 12 a las 19:05

Es solo un bloque de inicialización estático. Verificar: http://docs.oracle.com/javase/tutorial/java/javaOO/initial.html

contestado el 22 de mayo de 12 a las 19:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.