3

我有以下课程:

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

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

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

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

4

4 回答 4

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 循环中的某些逻辑仅初始化复杂数组的选定元素。

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

它是一个普通的代码块,包含在一对大括号中,前面有一个“静态”关键字。这些块可以在类定义中的任何地方,我们可以有一个字段或一个方法。Java 运行时保证所有静态初始化块都按照它们在源代码中出现的顺序被调用,这发生在将类加载到内存中时。

public class InitializationWithStaticInitBlock{

public static int staticIntField;
private boolean instanceBoolField = true;

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

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

于 2011-11-03T07:43:09.070 回答
0

除了语法,您正在查看一个静态初始化程序块。他们在这里被提及。

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

例子:

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
于 2011-11-03T07:46:02.010 回答
0

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

于 2011-11-03T07:46:58.120 回答
0

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

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

    static
    {
        SomeString = "aaa";
    }
}

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

参考

于 2011-11-03T07:42:36.470 回答