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

新手上路,请多包涵

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;

    ....

原文由 Adam Matan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 312
2 个回答

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

 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
}

原文由 Rich O‘Kelly 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

 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:引用自 这里

原文由 karan patel 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题