Boz*_*zho 10
当您想在一个地方初始化一个或多个静态变量时
它很有用,因为您可以应用异常处理,这在内联初始化时是不可能的.
例如:
public static ImageIcon defaultIcon = ImageIO.read(..);
Run Code Online (Sandbox Code Playgroud)
可以用.初始化
public static ImageIcon defaultIcon;
static {
try {
defaultIcon = ImageIO.read(..);
} catch (IOException ex){
System.out.println("No default icon available");
}
}
Run Code Online (Sandbox Code Playgroud)
另一个应用是复杂的初始化 例如,如果某个项目需要初始化多行代码.假设你有一个配置:
public static Configuration configuration;
static {
confuguration = new Configuration();
configuration.setSomething(..);
configuration.setSomethingElse(..);
...
}
Run Code Online (Sandbox Code Playgroud)
第三种用法是初始化一些外部API基础结构.我当前项目的一个例子:
static {
org.apache.xml.security.Init.init();
}
Run Code Online (Sandbox Code Playgroud)
但是,正如Mykola Golubyev所指出的,静态初始化块会降低代码的可读性,因此请谨慎使用它们.静态方法更透明地做同样的事情.
只是尽量避免使用静态初始化块.相反,您可以使用私有静态初始化函数,这将使您的代码更干净.
我将参考@Bozho的例子.
不要做
public static Configuration configuration;
static {
confuguration = new Configuration();
configuration.setSomething(..);
configuration.setSomethingElse(..);
...
}
Run Code Online (Sandbox Code Playgroud)
请改用
public static Configuration configuration = createConfiguration();
Run Code Online (Sandbox Code Playgroud)
要么
public static Configuration configuration = YourConfiguration.create();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3020 次 |
| 最近记录: |