3.4 变量和常量
与每种编程语言一样,变量用于存储值。常量是值不变的变量。在下面的部分中,您将学习如何声明变量和常量。
3.4.1 变量的声明
在Java中,每个变量都有一个类型。通过将类型放在第一位,后跟变量名来声明变量。以下是一些例子:
double salary;
int vacationDays;
long earthPopulation;
boolean done;
注意每个声明末尾的分号。分号是必要的,因为声明是一个完整的Java语句,所有Java语句都以分号结尾。
变量名必须以字母开头,并且必须是字母或数字序列。注意,“字母”和“数字”这两个术语在Java中比大多数语言都要广泛得多。字母定义为’A’-‘Z’、‘a’-‘z’、’_’、’$‘或任何表示语言中字母的Unicode字符。例如,德语用户可以在变量名中使用’ä ‘等变音符号;希腊语使用者可以使用π。类似地,数字是’0’-‘9’,以及表示语言中数字的任何Unicode字符。像’+‘或’©’)这样的符号不能在变量名中使用,也不能使用空格。变量名中的所有字符都很重要,大小写也很重要。变量名的长度基本上是无限的。
提示
如果你真的很好奇,对于Java来说,Unicode字符是什么“字母”,你可以使用Character类中的
isJavaIdentifierStart
和isJavaIdentifierPart
方法来检查。
提示
即使$是一个有效的Java字母,也不应该在自己的代码中使用它。它用于Java生成的名称,也不能使用Java保留字作为变量名。对于Java 9,单个
_
不能用作变量名。Java的未来版本可以使用_
作为通配符。您可以在一行中声明多个变量:int i, j; // both are integers
但我们不推荐使用这种样式。如果您分别声明每个变量,您的程序更容易阅读。
注意
如您所见,名称区分大小写,例如,
hireday
和hireDay
是两个独立的名称。一般来说,你不应该只有两个在字母大小写上有所不同的名字。然而,有时很难为变量取一个好的名称。例如,许多程序员会给变量赋予与类型相同的名称Box box; // "Box" is the type and "box" is the variable name
一些程序员倾向于在变量前面使用一个a做为前缀
Box aBox;
3.4.2 初始化变量
在声明变量之后,必须通过赋值语句显式初始化变量,不能使用未初始化变量的值。例如,Java编译器将以下语句序列标记为错误:
int vacationDays;
System.out.println(vacationDays); // ERROR--variable not initialized
通过使用左边的变量名、等号(=)、然后在右边用适当值的Java表达式来分配先前声明的变量。
int vacationDays;
vacationDays = 12;
可以在同一行中声明和初始化变量。例如:
int vacationDays = 12;
最后,在Java中,可以在代码中的任意位置放置声明。例如,以下是Java中的有效代码:
double salary = 65000.0;
System.out.println(salary);
int vacationDays = 12; // OK to declare a variable here
在Java中,将变量尽可能地声明为第一次使用的变量被认为是好的风格。
注意
从Java 10开始,如果可以从初始值推断出局部变量的类型,则不需要声明类型。只需使用关键字var而不是类型:
var vacationDays = 12; // vacationDays is an int var greeting = "Hello"; // greeting is a String
我们将在下一章中开始使用这个特性。
C和C++区分变量的声明和定义。例如,
int i = 10;
是定义,而
extern int i;
是一个声明。在Java,没有声明与定义分离。
3.4.3 常量
在Java中,使用关键字final
表示常量。例如:
public class Constants
{
public static void main(String[] args)
{
final double CM_PER_INCH = 2.54;
double paperWidth = 8.5;
double paperHeight = 11;
System.out.println("Paper size in centimeters: "
+ paperWidth * CM_PER_INCH + " by " + paperHeight * CM_PER_INCH;
}
}
关键字final表示可以对变量赋值一次,然后对变量的值进行一次设置。习惯上用大写字母命名常量。
在Java中创建一个常量可能更为常见,因此它可以用于单个类中的多个方法。这些通常被称为类常量。用关键字static final
设置类常量。下面是使用类常量的示例:
public class Constants2
{
public static final double CM_PER_INCH = 2.54;
public static void main(String[] args)
{
double paperWidth = 8.5;
double paperHeight = 11;
System.out.println("Paper size in centimeters: "
+ paperWidth * CM_PER_INCH + " by " + paperHeight * CM_PER_INCH;
}
}
注意,类常量的定义出现在主方法之外。因此,常数也可以在同一类的其他方法中使用。此外,如果像在我们的示例中一样声明常量public,其他类的方法也可以在我们的示例中使用它,如Constants2.CM_PER_INCH。
C++注意
const是一个保留的Java关键字,但它目前不用于任何东西。必须对常量使用final。
3.4.4 枚举类型
有时,变量应该只保存一组有限的值。例如,您可以销售四种尺寸的衣服或比萨饼:小、中、大和特大。当然,您可以将这些大小编码为整数1、2、3、4或字符s、m、l和x。但这是一个容易出错的设置。变量太容易保存错误的值(如0或m)。
每当出现这种情况时,您可以定义自己的枚举类型。枚举类型具有有限数量的命名值。例如,
enum Size { SMALL, MEDIUM, LARGE, EXTRA_LARGE };
现在可以声明这种类型的变量:
Size s = Size.MEDIUM;
类型Size的变量只能包含类型声明中列出的一个值,或者特殊值null,该值指示变量根本没有设置为任何值。
我们将在第5章中更详细地讨论枚举类型。