在这个代码示例中,静态操作有什么用



我正在使用jqGrid编写一个基本的webapp教程,jqGrid是一个jquery插件,只在网格中显示数据。我正在学习本教程,但我不明白data映射声明之后的行中发生了什么。

public class Data {
private static Map<String, List<Person>> data = new HashMap<String, List<Person>>();
static
{
    populateBS217RHData();
    poplateBS18QTData();
}
public List<Person> getData(String postcode)
{
    return data.get(postcode.toUpperCase());        
}
private static void populateBS217RHData()
{
    // do thing
}
private static void poplateBS18QTData()
{
    // do other thing
}

}

我知道static关键字的目的是在不实例化类的情况下使方法/属性可用,但我并没有真正"了解"它在这个上下文中的作用。

我在.NET方面有很多经验,但在Java方面几乎没有,所以我真的不确定这里发生了什么。这种语法/用法有特殊名称吗?

它是一个静态初始化器,根据JLS,它是。。。

在初始化类时执行。

它们通常用于从非平凡的多行表达式初始化static字段(称为类变量)。这只是因为可以在字段声明的同一行上执行单个静态函数调用或变量赋值,从而减少代码行数。

Java教程>初始化字段也谈到了它:

静态初始化块是一个普通的代码块,用大括号{}括起来,前面是静态关键字

一个类可以有一个或多个这样的类。它们按"从左到右"的顺序(即类主体中声明的顺序)调用。

您还可以声明"实例初始化"块,这些块是类似的,但前面没有static关键字——它们在每次实例化类时都会运行。

如果在块之后声明字段,初始化块可能会很棘手。初始化块中有一些读写字段的规则,这些规则取决于字段和块的声明顺序。

坦率地说,首先声明字段更简单,如果必须使用初始化块,则随后再声明。

static
{
    populateBS217RHData();
    poplateBS18QTData();
}

这是一个静态块

静态块也称为静态初始化块。静态初始化块是一个普通的代码块,包含在大括号{}中,前面是static关键字。静态块在JVM加载类时执行。

一个类可以有任意数量的静态初始化块,它们可以出现在类主体中的任何位置。运行时系统保证静态初始化块按照它们在源代码中出现的顺序进行调用。

  • 如果在静态块中有可执行语句,JVM将将类加载到中时自动执行这些语句JVM
static
{
    populateBS217RHData();
    poplateBS18QTData();
}

这里是static初始化块。放置在静态初始化块的大括号之间的代码将仅对驻留类执行一次,即使类对象已创建多次。

java中,还有一个初始化块,称为-实例初始化块其中不存在static关键字。实例初始化块将为类的每个object/instance执行。它就像类的其他实例成员一样。

最新更新