Java:静态初始化块什么时候有用?

2022-08-31 08:55:49

块内的初始化有什么区别:static

public class staticTest {

    static String s;
    static int n;
    static double d;

    static {
        s = "I'm static";
        n = 500;
        d = 4000.0001;
    }
    ...

和单独的静态初始化:

public class staticTest {

    static String s = "I'm static";
    static int n    = 500;
    static double d = 4000.0001;

    ....

答案 1

静态初始化块允许更复杂的初始化,例如使用条件:

static double a;
static {
    if (SomeCondition) {
      a = 0;
    } else {
      a = 1;
    }
}

或者,当需要的不仅仅是构造时:当使用生成器创建实例时,需要异常处理或创建静态字段以外的工作。

静态初始化块也在内联静态初始值设定项之后运行,因此以下内容有效:

static double a;
static double b = 1;

static {
    a = b * 4; // Evaluates to 4
}

答案 2

您可以在内部使用 try/catch 块,如下所示:static{}

MyCode{

    static Scanner input = new Scanner(System.in);
    static boolean flag = true;
    static int B = input.nextInt();
    static int H = input.nextInt();

    static{
        try{
            if(B <= 0 || H <= 0){
                flag = false;
                throw new Exception("Breadth and height must be positive");
            }
        }catch(Exception e){
            System.out.println(e);
        }

    }
}

PS:从这里引用


推荐