Android:I 不明白:static { foo();}
Android:I do not understand: static { foo();}
有时我会看到类似的东西,在 Android 中的 class:
static
{
foo();
}
这是做什么用的?
为什么?
那是一个 static
街区。它在您的代码中第一次引用 class 时执行,它正在调用名为 foo()
的静态方法。您可以找到有关静态块的更多信息 here。正如@CommonsWare 所提到的,您可以通过两种不同的方式初始化静态字段,内联声明时间
static ArrayList<String> test = new ArrayList<String>() {{
add("A");
add("B");
add("C");
}};
但是如您所见,它并不容易阅读。如果您改用静态块
static ArrayList<String> test;
static {
test = new ArrayList<>();
test.add("a");
test.add("b");
test.add("c");
}
或者如您所问的那样
static ArrayList<String> test;
static {
foo();
}
private static void foo() {
test = new ArrayList<>();
test.add("a");
test.add("b");
test.add("c");
}
静态class成员意味着它可以在没有变量实例的情况下被调用。
例如
class my_class
{
static void my_static_function()
{
// whatever
}
}
两种方式都可以调用:
my_class::my_static_function();
my_class m;
m.my_static_function();
这是一个静态初始化块,用于初始化静态变量。在 class 的生命周期中,这些 运行 一次(不是每次创建实例时)。例如,您可能希望以通常无法完成的方式填充静态数据结构。
还有非静态初始化程序块。每次创建实例时,这些都是 运行。它们通常用于初始化匿名 classes 的变量。知道这些在构造函数之前执行是很有用的。
class BlockTest {
static {
System.out.println("Static block.");
}
{
System.out.println("Non-static block.");
}
public BlockTest() {
System.out.println("Constructor.");
}
public static void main(String[] args) {
new BlockTest();
}
}
此代码将输出以下内容:
Static block.
Non-static block.
Constructor.
有时我会看到类似的东西,在 Android 中的 class:
static
{
foo();
}
这是做什么用的?
为什么?
那是一个 static
街区。它在您的代码中第一次引用 class 时执行,它正在调用名为 foo()
的静态方法。您可以找到有关静态块的更多信息 here。正如@CommonsWare 所提到的,您可以通过两种不同的方式初始化静态字段,内联声明时间
static ArrayList<String> test = new ArrayList<String>() {{
add("A");
add("B");
add("C");
}};
但是如您所见,它并不容易阅读。如果您改用静态块
static ArrayList<String> test;
static {
test = new ArrayList<>();
test.add("a");
test.add("b");
test.add("c");
}
或者如您所问的那样
static ArrayList<String> test;
static {
foo();
}
private static void foo() {
test = new ArrayList<>();
test.add("a");
test.add("b");
test.add("c");
}
静态class成员意味着它可以在没有变量实例的情况下被调用。
例如
class my_class
{
static void my_static_function()
{
// whatever
}
}
两种方式都可以调用:
my_class::my_static_function();
my_class m;
m.my_static_function();
这是一个静态初始化块,用于初始化静态变量。在 class 的生命周期中,这些 运行 一次(不是每次创建实例时)。例如,您可能希望以通常无法完成的方式填充静态数据结构。
还有非静态初始化程序块。每次创建实例时,这些都是 运行。它们通常用于初始化匿名 classes 的变量。知道这些在构造函数之前执行是很有用的。
class BlockTest {
static {
System.out.println("Static block.");
}
{
System.out.println("Non-static block.");
}
public BlockTest() {
System.out.println("Constructor.");
}
public static void main(String[] args) {
new BlockTest();
}
}
此代码将输出以下内容:
Static block.
Non-static block.
Constructor.