Java核心技术速学版(第3版)
上QQ阅读APP看书,第一时间看更新

1.3.4 常量

final关键字表示赋值后不能被再次更改的值。在其他的语言中,通常可以将这样的值称为常量(constant)。例如:

final int DAYS_PER_WEEK = 7;

按照惯例,常量的名称应当全部使用大写字母。

你也可以使用static关键字来声明一个在方法外的常量:

public class Calendar {
     public static final int DAYS_PER_WEEK = 7;
     ...
}

这样一来,该常量就可以在多个方法中被使用。在Calendar内部,你可以通过DAYS_PER_WEEK来表示该常量。但是,若要在另一个类中使用该常量,需要在该常量之前加上类名,即Calendar. DAYS_PER_WEEK。

注意:System类中声明了一个常量,如下所示。

public static final PrintStream out

这样,可以在任何地方通过System.out的形式使用它。它也是少数几个没有用大写字母表示的常量之一。

延迟final变量的初始化是合法的,只需要在首次使用它之前初始化即可。例如,以下代码是合法的:

final   int DAYS_IN_FEBRUARY;
if (leapYear) {
     DAYS_IN_FEBRUARY = 29;
} else {
     DAYS_IN_FEBRUARY = 28;
}

这也就是称它为“最终”变量的原因。一旦赋值,它就是最终变量,永远无法更改。

注意:有时,你需要一组相关的常量,示例如下。

public static final int MONDAY = 0;
public static final int TUESDAY = 1;
...

在这种情况下,你可以定义一个枚举(enumeration)。

enum Weekday { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY,
SATURDAY, SUNDAY };

这样,Weekday就是一种带有Weekday.MONDAY等数值的类型。下面是如何声明和初始化Weekday变量。

Weekday startDay = Weekday.MONDAY;

我们将在第4章详细讨论枚举。