变量声明后这个静态块是什么?

时间:2012-05-22 18:17:40

标签: java static

我以前从未见过这个 - 它叫什么?这是一个类级变量,位于文件的开头。

为了清楚起见,我指的是变量之后的static {}

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);
    }

5 个答案:

答案 0 :(得分:4)

这是一个静态初始化块。它可以在类中的任何位置声明(但在方法之外),但按照惯例,它通常在正在初始化的静态变量之后写入。它在Java语言规范section §8.7中指定。

顾名思义,它通常用于在类加载时初始化类中静态属性的状态。来自Java tutorial

  

静态初始化块是用大括号{}括起来的正常代码块,前面是static关键字(...)一个类可以有任意数量的静态初始化块,它们可以出现在类的任何地方身体。运行时系统保证按照它们在源代码中出现的顺序调用静态初始化块。

答案 1 :(得分:2)

用于初始化静态变量。如您所知,您无法在类的构造函数中初始化它们,因此您可以使用static块 举个例子: 你想用值1,2,3等填充静态数组。有两种方法:

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;
        }
    }
}

答案 2 :(得分:1)

这是代码的静态部分,在声明

之后初始化静态var URI_MATCHER

答案 3 :(得分:0)

这是一个static initialization block。它允许您“设置”静态字段,这些字段无法在类实例的方法中正确完成。

答案 4 :(得分:0)

它只是一个静态初始化块。查看:http://docs.oracle.com/javase/tutorial/java/javaOO/initial.html

相关问题