3

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

为了清楚起见,我指的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);
    }
4

5 回答 5

4

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

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

静态初始化块是用大括号 { } 括起来并以 static 关键字 (...) 开头的普通代码块。一个类可以有任意数量的静态初始化块,它们可以出现在类主体的任何位置。运行时系统保证静态初始化块按照它们在源代码中出现的顺序被调用。

于 2012-05-22T18:20:24.127 回答
2

用于初始化静态变量。如你所知,你不能在你的类的构造函数中初始化它们,所以你可以使用staticblock 作为一个例子:你想用值 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;
        }
    }
}
于 2012-05-22T18:24:54.053 回答
1

这是代码的静态部分,它在声明静态变量 URI_MATCHER 后对其进行初始化

于 2012-05-22T18:20:25.360 回答
0

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

于 2012-05-22T18:22:19.827 回答
0

这是一个静态初始化块它允许您“设置”静态字段,这在类实例的方法中无法正确完成。

于 2012-05-22T18:21:14.567 回答