static()方法(没有任何声明)

时间:2011-11-03 07:39:21

标签: java static initializer static-initialization

我有以下课程:

public abstract class A()
{
   public static final SomeString = null;

   static()
   {
       SomeString = "aaa";
   }
}

何时调用此静态方法以及如何调用?

创建这样的静态方法(没有名称/返回类型)的目的是什么?

4 个答案:

答案 0 :(得分:7)

这不是一个方法,它是一个静态初始化块,你的语法错误

public abstract class A()
{
   public static String SomeString = null;

   static
   {
       SomeString = "aaa";
   }
}

在声明声明时初始化Java中的字段(静态或实例)的最简单方法是提供兼容数据类型的编译时常量值。例如:

public class InitializationWithConstants{

public static int staticIntField = 100;
private boolean instanceBoolField = true;

}

这种类型的初始化由于其简单性而有其局限性,即使在一些中等复杂的逻辑上也无法支持初始化 - 比如使用for循环中的某些逻辑仅初始化复杂数组的选定元素。

这里需要静态初始化块和初始化块,分别用于初始化静态和实例字段。

这是一个包含在一对大括号内的正常代码块,前面是'static'关键字。这些块可以在类定义中的任何位置,我们可以在其中具有字段或方法。 Java运行时保证按照它们在源代码中出现的顺序调用所有静态初始化块,并且这会在内存中加载类时发生。

public class InitializationWithStaticInitBlock{

public static int staticIntField;
private boolean instanceBoolField = true;

static{
 //compute the value of an int variable 'x'
 staticIntField = x;
}
}

由于静态初始化块实际上是代码块,因此它们允许我们初始化那些需要进行一些逻辑处理才能获得其初始值的静态字段。

答案 1 :(得分:0)

你的语法不正确;它应该是:

public abstract class A()
{
    public static final String SomeString;

    static
    {
        SomeString = "aaa";
    }
}

static块允许在加载类时初始化静态变量,而初始化比简单= something;更复杂。

Reference

答案 2 :(得分:0)

除了语法之外,您正在查看静态初始化程序块。他们被提及here

本质上,静态初始化程序块是在加载类时执行的一段代码,可用于初始化类中的静态字段。

示例:

public abstract class A
{
    public static final String SomeString;

    static
    {
        System.out.println("static{}");    
        SomeString = "aaa";
    }    

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

输出:

static{}
main

答案 3 :(得分:0)

是的,这不是一种方法。它是静态块,并且在加载所有者类时我会评估一次 你可以用它来动态初始化静态变量......