3.4 变量与常量
与所有程序设计语言一样,Java也使用变量来存储值。常量就是值不变的量。
3.4.1 声明变量
-
在Java中,每个变量都有一个类型(type)。
-
变量名必须是一个以字母开头并由字母或数字构成的序列。
-
字母包括’A’‘Z’、‘a’‘z’、‘_’、'$'或在某种语言表示字母的任何Unicode字符。
-
同样,数字包括’0’~'9’和在某种语言表示数字的任何Unicode字符。
-
但**‘+‘和’@’**这样的符号不能出现在变量名中,空格也不行。
-
变量名中所有的字符都是有意义的,并且大小写敏感。
-
变量名的长度基本没有限制。
-
-
若想知道哪些Unicode字符属于Java中的“字母”,可以使用Character类的isJavaIdentifierStart和isJavaIdntifierPatr来检查。
提示:尽管 $ 是个合法的Java字符,但不要在你自己的代码中使用这个字符,它只用在Java编译器或其他工具生成的名字中。
-
另外,不能使用Java保留字作为变量名。
-
在Java 9中,单下划线 _ 不能作为变量名。不过将来的版本可能使用_作为通配符。
-
可以在一行声明多个变量。
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表达式。
-
注意:在Java中,变量的声明尽可能地靠近变量第一次使用的地方,这是一种良好的程序编写风格。
-
注释:从Java10开始,对于局部变量,如果可以从变量的初始值推断出它的类型,就不再需要声明类型。只需要使用var关键字而无须指定类型:
var vacationDays = 12; //vacationDays is an intvar greeting = "Hello"; //greeting is a String
3.4.3 常量
在Java中,利用关键字final指示常量。 例如:
public class Constans {public static void main(String[] args) {finale 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中,若希望某个常量可以在一个类中的多个方法中使用,通常将这些常量成为类常量(class constant)。
使用关键字 static final 来设置一个类常量。
例如:
public class Constans {public static finale 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);} }
注意:
- 类变量的定义位于main方法的外部。因此在同一个类的其他地方也可以使用这个变量。
- 如果一个类常量被设置为public, 那么其他类的方法也可以使用这个常量,例如这里的Constant2.CM_PER_INCH。
-
C++注释:const是Java保留的关键字,但目前并没有使用。在Java中,必须使用final定义常量。
3.4.4 枚举类型
-
有时,变量的取值只在一个有限的集合内。
例如销售的服装和披萨只有小、中、大和超大四种尺寸的。
我们可以将这些尺寸分别编码为1、2、3、4或S、M、L、X。
但这种设置很容易出错(或者说无法检错)。
-
针对这种情况,我们可以自定义枚举类型。
即枚举类型包括有限个命名的值。例如
enum Size {SMALL, MEDIUM, LARGE, EXTRA_LARGE}; //用enum来定义枚举类型,定义了一个枚举类型,名叫Size,有四个值SMQLL,MEDIUM,LARGE,EXTRA_LARGE
现在我们可以声明这种类型的变量:
Size s = Size.MEDIUM;
Size类型的变量只能存储这个类型声明中给定的某个枚举值,或特殊值null,null表示这个变量没有设置任何值。