购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

bt2-L 1.3 变量

在下面的小节中,你将学习如何声明和初始化变量和常量。

1.3.1 变量声明

Java是一种强类型语言。每个变量只能保存一种特定类型的值。声明变量时,需要指定变量的类型、名称和一个可选的初始值。例如:

int total = 0;

你可以在一个语句中声明相同类型的多个变量:

int total = 0, count; // count is an uninitialized integer

但是,大多数的Java程序员都喜欢单独声明每个变量。

一起来看下面这个变量声明:

Random generator = new Random();

在这个声明中,对象的类的名称出现了两次。其中,第一个Random表示的是变量generator的类型;第二个Random是构造该类的对象的new表达式的组成部分。

为了避免这种重复,可以使用var关键字:

var generator = new Random();

现在,变量的类型是初始化该变量的表达式的类型。在这个例子中,generator是一个类型为Random的变量。

当声明变量的类型非常明显时,本书会使用var关键字。

1.3.2 标识符

变量、方法或类的名称统称为 标识符 (identifier)。在Java中,标识符必须以字母开头,由任意字母、数字、_符号和$符号组成。但是,$符号用于自动生成的标识符,因此,你不应该直接使用它。最后,_符号本身并不是有效的标识符。

在Java中,字母和数字可以来自 任何 字母,而不仅仅是拉丁字母。例如,π和élévation也是有效的标识符。此外,标识符区分字母的大小写,count和Count是不同的标识符。

你不能在标识符中使用空格或符号。最后,也不能使用double等关键字作为标识符。

按照惯例,变量和方法的名称以小写字母开头,类的名称以大写字母开头。Java程序员喜欢使用“驼峰式拼写法”(camel case,也称为骆驼式拼写法),即当名称由多个单词组成时,使用大写字母标识每一个单词的首字母,如countOfValidInputs。

1.3.3 初始化

当在一个方法中声明变量时,必须先对其进行初始化,然后才能使用它。例如,以下代码会导致编译时错误:

int count;
count++; // Error—uses an uninitialized variable

编译器必须能够验证变量在使用之前是否已经初始化。例如,以下代码也是一种错误:

int count;
if (total == 0) {
     count = 0;
} else {
     count++; // Error—count might not be initialized
} 

Java允许在方法中的任何位置声明变量。在第一次需要使用变量之前,尽可能晚地声明变量被认为是一种较好的编程的风格。例如:

var in = new Scanner(System.in); // See Section 1.6.1 for reading input 
System.out.println("How old are you?");
int age = in.nextInt(); 

变量在其初始值可用时声明即可。

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章详细讨论枚举。 okHNDpigWrAtlbFqp+1n8ecl8q65q1GKVvGuoZ0ryxLF9GbY3EUXcSTbn8wO3rEi

点击中间区域
呼出菜单
上一章
目录
下一章
×