我以前从未见过这个 - 它叫什么?这是一个类级变量,位于文件的开头。
为了清楚起见,我指的是变量之后的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);
}
答案 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)