在程序执行过程中,其值不能被改变的量称为常量,其值能被改变的量称为变量。变量与常量的命名都必须使用合法的标识符。
在程序运行过程中不能被改变的量称为常量(constant),通常也被称为“final变量”。常量在整个程序中只能被赋值一次。
在Java语言中声明一个常量,除了要指定数据类型外,还需要通过final关键字进行限定。声明常量的标准语法如下。
final datatype CONSTNAME=VALUE;
其中,final是Java的关键字,表示定义的是常量,datatype为数据类型,CONSTNAME为常量的名称,VALUE是常量的值。
【例2-5】声明常量,实例代码如下。
final double PI = 3.1415926; //声明double型常量PI并赋值
final boolean FLAG = true; //声明boolean型常量FLAG并赋值
注意事项 常量名通常使用大写字母,但这并不是必需的。只不过很多Java程序员已经习惯使用大写字母来表示常量。通过这种命名方法实现与变量的区别。
在程序中除了可以定义符号常量,还可以把字面量赋给任何内置类型的变量。例如如下代码。
byte a = 68; //为byte型变量a赋值整数常量68
char a = 'A'; //把字符常量'A'赋值给字符型变量a
byte、int、long和short都可以用十进制、十六进制以及八进制的方式来表示。当使用字面量时,前缀0表示八进制,而前缀0x代表十六进制,例如如下代码。
int decimal = 100;
int octal = 0144;
int hexa = 0x64;
和其他语言一样,Java的字符串常量也是包含在两个引号之间的字符序列。下面是字符串型字面量的例子:“Hello world”“two\nlines”“\" this is a quotes\" ”。
Java语言支持一些特殊的转义字符序列。常见的转移字符如表2-3所示。
表2-3 常用的转义字符
变量是Java程序的一个基本存储单元,由一个或多个连续的字节组成。变量都有名字,程序中通过变量名引用对应内存单元中的数据。
在Java中,使用变量之前需要先声明变量。变量声明通常包括三部分,变量类型、变量名和初始值,其中变量的初始值是可选的。声明变量的语法格式如下。
type identifier [= value][,identifier[=value]...];
其中,type可以是Java语言的基本数据类型,或者类、接口等复杂类型的名称(类和接口在本书后面章节中进行介绍)。identifier是变量名,必须是合法的标识符,可以使用逗号隔开声明多个同类型的变量。=value表示用具体的值对变量进行初始化,即把某个值赋给变量。例如如下代码。
int age ; //声明int型变量age
double d1 = 12.27; //声明double型变量d1并赋值12.27
int a,b,c; //声明三个整型变量a,b,c
int d = 3, e = 4, f = 5; //声明三个整型变量并赋初值
由于变量被定义后暂存在内存中,等到程序执行到某一个点,该变量会被释放掉,也就是说变量有它的生命周期。在变量的生命周期内其可以被访问的范围称为作用域,若超出该区域对变量进行访问则在编译时会出现错误。
根据作用域的不同,可将变量分为不同的类型:类成员变量、局部变量、方法参数变量和异常处理参数变量。下面对这几种变量进行详细说明。
类成员变量声明在类中,但不属于任何一个方法,其作用域为整个类。
【例2-6】声明类成员变量,实例代码如下。
class ClassVar{
int x = 45;
int y ;
}
在上述代码中,定义的两个变量x、y均为类成员变量,其中第一个进行了初始化,而第二个没有进行初始化。
在类的成员方法中定义的变量(在方法内部定义的变量)称为局部变量。局部变量只在当前代码块中有效。
【例2-7】声明两个局部变量,实例代码如下。
在上述代码中,定义的两个变量x、y均为局部变量,其中x的作用域是整个main()方法,而y的作用域仅仅局限于if语句代码块。
声明为方法参数的变量的作用域是整个方法。
【例2-8】声明一个方法参数变量,实例代码如下。
class FunctionParaVar{
public static int getSum(int x){
x = x + 1;
return x;
}
}
在上述代码中,定义了一个成员方法getSum(),方法中包含一个int类型的方法参数变量x,其作用域是整个getSum ()方法。
有关变量的声明、作用域和使用方法等更多内容将在后续章节中通过大量实例进行深入讲解。