Java语法问题

时间:2011-07-28 13:19:01

标签: java syntax

什么是

static{
    //something
}

在类定义体内声明是什么意思?

public class A extends B{
     static {
          C.register(new C(A.class,
                    (byte) D.x.getCode()) {
                         public DataSerializable newInstance() {
                              return new A();
                         }
                    }
               );
     }
 }

6 个答案:

答案 0 :(得分:6)

static块称为“静态初始化块”。它与常规构造函数非常相似,只是它只能初始化静态变量。

我发现当一些静态变量的初始化可能抛出你想要处理的异常或者至少是log时,它会很有用。它在静态最终变量的初始化中特别有用。

您可以在此处阅读有关静态初始化块的更多信息:Initializing Fields

答案 1 :(得分:3)

它执行一段代码而不需要这个类的实例,即只要类加载器加载该类。

答案 2 :(得分:2)

这变为static initialisation block,可以写成静态方法。

答案 3 :(得分:2)

这是一个静态初始化程序。它在加载类后运行,结果可以存储在静态成员中。它用于初始化需要比常规新Xyz()更多的静态成员(如列表或地图)......

答案 4 :(得分:1)

这是一个静态初始化程序。它允许您在创建任何实例之前指定在加载类时发生的事情。

如果从静态初始化程序抛出异常,则会非常混乱,很难说它来自何处。在静态初始化程序中执行的任何操作都应该有一个try-catch,并记录异常。如果可以,这是一个很好的语言功能。

答案 5 :(得分:1)

这意味着在将类加载到JVM中时,您将把静态块内的此部分扩展为FIRST。

执行以下简单程序可能会使事情更清晰

public class Test123 {
  static{
    System.out.println("Hello from static block");
  }

  public static void main(String[] args) {
    System.out.println("In main");
  }
}

上面的输出将是

Hello from static block 
In main