static()方法(没有任何decleration)

aka*_*spi 3 java static initializer static-initialization

我有以下课程:

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

   static()
   {
       SomeString = "aaa";
   }
}
Run Code Online (Sandbox Code Playgroud)

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

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

Abi*_*san 7

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

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

   static
   {
       SomeString = "aaa";
   }
}
Run Code Online (Sandbox Code Playgroud)

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

public class InitializationWithConstants{

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

}
Run Code Online (Sandbox Code Playgroud)

这种类型的初始化由于其简单性而具有其局限性,并且即使在一些中等复杂的逻辑上也不能支持初始化 - 例如使用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;
}
}
Run Code Online (Sandbox Code Playgroud)

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