Cem*_*mre 5 java static initialization
正如标题所说,两者之间究竟有什么区别
public static String myString = "Hello World!";
Run Code Online (Sandbox Code Playgroud)
和
public static String myString;
static {
myString = "Hello World";
}
Run Code Online (Sandbox Code Playgroud)
除了结构之外还有什么重要的区别吗?
对于你的例子,没有区别.但正如你所看到的,
public static String myString = "Hello World!";
Run Code Online (Sandbox Code Playgroud)
只能接受一个表达式来初始化变量.但是,在静态初始化程序(JLS 8.7)中,可以执行任意数量的语句.例如,它可以这样做:
static
{
myString = "Hello";
myString += " ";
myString += "World";
}
Run Code Online (Sandbox Code Playgroud)
对于你的例子,显然没有必要这样做,但是变量的初始化可能不仅仅是一个表达式,也许是许多语句,因此Java创建了静态初始化器.
静态 {...} 块让您有机会做比在字段声明中能做的更多的事情。
例如,您可以填写地图的一些详细信息:
private static final Map<String, String> data = new HashMap<String, String>();
static {
data.put("A", "Hello");
data.put("B", "There");
data.put("C", "You");
}
Run Code Online (Sandbox Code Playgroud)
有时您可能还需要在实例化之前获取数据(从文件、数据库等):
public class Foo {
private static final Person person;
static {
InputStream personData = Foo.class.getResourceAsStream("something.txt");
person = new Person(personData);
}
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2149 次 |
| 最近记录: |