谁能告诉我在类中使用静态块有什么用?

Vij*_*wal 2 java

public class myclass{ 

    static{ 

        //some statements here 

    } 

    //some variables declared here 
    //some functions defined here 
} 
Run Code Online (Sandbox Code Playgroud)

pol*_*nts 12

这是一个static初始化器.类似于实例初始化程序(第8.6节),您可以使用它来初始化class它的加载时间.它没有明确地"调用"; 它在class加载时以文本顺序自动执行(static文本中稍后出现的初始化程序保证在初始化期间稍后执行).

您可以使用static初始化程序:

  • 初始化一些static字段
  • 执行一些其他一次性计算,可能需要try-catch块,记录与加载相关的事件class,确保启用Java的断言等.

有一些警告,例如class可以重新加载,并且通常有编写它的替代private static方法(例如,重构为命名方法),但使用static初始化程序是一种选择.

参考

相关问题

这些问题讨论了static初始化器使用的各个方面和实例:


示例用法:要求启用断言

以下是" 使用断言编程Java语言指南 "中规定的习惯用法,以确保在运行时启用断言:

要求断言已启用

某些关键系统的程序员可能希望确保在现场禁用断言.如果已禁用其断言,则以下静态初始化习惯用法可防止对类进行初始化:

static {
    boolean assertsEnabled = false;
    assert assertsEnabled = true; // Intentional side effect!!!
    if (!assertsEnabled)
        throw new RuntimeException("Asserts must be enabled!!!");
}
Run Code Online (Sandbox Code Playgroud)

把这个static-initializer放在你班级的顶端.

通过将此代码段放在static类的初始化程序中,代码将是加载类时执行的第一个代码之一,然后才能创建类的任何实例.代码本身检查是否启用了Java断言,RuntimeException如果不是,则抛出a断言.

也可以看看

相关问题


Sea*_*oyd 5

加载类时会执行静态块,因此它们是初始化静态变量的好地方.特别是需要比单线程更多逻辑的常量可以使用静态块来舒适地初始化:

private static final String MY_CONSTANT;

static{
    // read properties from file
    MY_CONSTANT = properties.get("my.property.name");
}
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

476 次

最近记录:

11 年,7 月 前