2011-11-03 41 views

回答

0

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

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

    static 
    { 
     SomeString = "aaa"; 
    } 
} 

static块允许时当初始化比单纯= something;更复杂的类加载到被初始化静态变量。

Reference

6

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

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; 

} 

这种类型的初始化的有其局限性,由于其简单性和基于甚至在一些中等复杂的逻辑它不能支持初始化 - 如使用一些逻辑初始化复杂阵列的只有选定的元件以用于循环。

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

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

public class InitializationWithStaticInitBlock{ 

public static int staticIntField; 
private boolean instanceBoolField = true; 

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

由于静态初始化块实际上是代码块,这样他们会允许我们初始化甚至需要做一些逻辑处理他们得到他们的初始值的静态字段。

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 
0

赞成票它不是一个方法。它是静态块,并且当所有者类被加载时我被评估过一次。
你可以用它来动态初始化静态变量...

相关问题