Java里面的静态代码块| Java Debug 笔记

679 阅读1分钟

本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看 活动链接

问题:Java里面的静态代码块

I was looking over some code the other day and I came across: 前几天我在看一些代码时发现:

static {
    ...
}

我是c++转来的,我不知道为啥要这样干。这个代码也编译成功了,没出错误。这里的"static"代码块是啥啊?

回答一

它是一个静态初始化器。它在类被加载时执行(准确地说应该是初始化,但你通常不会注意到其中的区别)。

它也可以被看成是一个“类的构造函数”。

请注意,还有一些实例初始化器,它们看起来相同,但是它们没有static关键字。当创建对象的实例时,除了构造函数中的代码外,还会运行这些代码。

回答二

它是一个静态初始化器。它在类加载时执行和是进行静态变量初始化的地方。

来自java.sun.com/docs/books/…

一个类可以有任意数量的静态初始化块,它们可以出现在类的任何地方。系统保证在运行时静态初始化的代码块按照它们在源代码中出现的顺序被调用。

如果你有一个类,带有实现了查找功能的静态的map,它看起来就是这样的:

class MyClass {
    static Map<Double, String> labels;
    static {
        labels = new HashMap<Double, String>();
        labels.put(5.5, "five and a half");
        labels.put(7.1, "seven point 1");
    }
    //...
}

它是非常有用的。因为上面的静态域不能使用labels = .... 来初始化,它需要以某种方式调用put方法。

文章翻译自Stack Overflow:stackoverflow.com/questions/2…