文档

Java™ 教程
隐藏目录
初始化字段
路径: 学习Java语言
课程: 类和对象
章节: 更多关于类

初始化字段

正如你所见,你可以在声明字段时为其提供一个初始值:

public class BedAndBreakfast {

    // 初始化为10
    public static int capacity = 10;

    // 初始化为false
    private boolean full = false;
}

当初始化值可用且初始化可以放在一行时,这种方式很好用。然而,由于其简单性,这种初始化方式有一些限制。如果初始化需要一些逻辑(例如错误处理或用于填充复杂数组的for循环),简单的赋值是不足够的。实例变量可以在构造函数中初始化,可以在其中使用错误处理或其他逻辑。为了为类变量提供相同的功能,Java编程语言包括了静态初始化块


注意: 不必在类定义的开始处声明字段,尽管这是最常见的做法。只要在使用之前声明和初始化即可。

静态初始化块

一个静态初始化块是一段常规的代码块,用花括号{ }括起来,并且前面带有static关键字。以下是一个示例:

static {
    // 初始化所需的代码放在这里
}

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

静态块还有一种替代方法——你可以编写一个私有的静态方法:

class Whatever {
    public static varType myVar = initializeClassVariable();
        
    private static varType initializeClassVariable() {

        // 初始化代码放在这里
    }
}

私有静态方法的优点是,如果你需要重新初始化类变量,它们可以在以后被重用。

初始化实例成员

通常情况下,你会在构造函数中放置代码来初始化实例变量。使用构造函数来初始化实例变量有两种替代方法:初始化块和final方法。

用于实例变量的初始化块看起来和静态初始化块一样,但没有static关键字:

{
    // 初始化所需的代码放在这里
}

Java编译器会将初始化块复制到每个构造函数中。因此,这种方法可以在多个构造函数之间共享一段代码块。

final方法在子类中无法被覆盖。这在接口和继承的课程中有讨论。以下是使用final方法来初始化实例变量的示例:

class Whatever {
    private varType myVar = initializeInstanceVariable();
        
    protected final varType initializeInstanceVariable() {

        // 初始化代码放在这里
    }
}

如果子类可能想要重用初始化方法,这种方法尤其有用。该方法是final的,因为在实例初始化期间调用非final方法可能会引发问题。


上一页:了解类成员
下一页:创建和使用类和对象总结