前文已经介绍过,外界的数据进入计算机需要有一个“栖身”之所,系统会分配内存空间用于存储这些数据。在程序代码中所定义的变量(Variable)与常数(Constant)就让编译器在程序投入系统运行时给这些变量与常数分配内存空间,以便参与程序中的各种运算与处理。变量是一种可变动的数值,它的数值会根据程序内部的处理与运算进行变更。简单来说,变量与常数都是程序设计人员用来存取内存中数据内容的一个标识码,两者最大的差异在于变量的内容会随着程序执行而改变,但常数则会固定不变。
变量是具备名称的一块内存空间,用来存储可变动的数据内容。当程序需要存取某个内存的内容时,就可以通过变量名称将数据从内存中取出或写入这个内存空间。在使用变量前,必须对变量进行声明,Java语言的变量声明语句可分为“数据类型”与“变量名称”两部分。声明语句的语法如下:
数据类型变量名称; // 符号“;”表示语句的结束
假如我们声明两个整数变量num1和num2,其中int为Java语言中用于声明整数类型的关键字(keyword):
int num1=30; int num2=77;
这时Java会分别自动分配4字节的内存空间给变量num1和num2,它们的存储值分别为30和77。当程序运行过程中需要存取这块内存空间的内容时,就可以直接使用变量名称num1与num2来进行存取,如图2-7所示。
图2-7
以上为单个变量声明的程序语句,当同时要声明多个相同数据类型的变量时,可使用逗号“,”来分隔变量名称,例如:
long apple, banana ; // 同时声明多个long类型的变量,以逗号作为分隔符
完成变量的声明后,有些变量可根据需要赋初值,就是在变量声明的语句中加入初值的设置,语法如下:
数据类型变量名称=初值;
例如:
int apple =5; // 声明单个int类型的变量,并把它的初值设置为5 boolean a=true,b=false; // 同时声明多个boolean类型的变量,并赋初值
在赋初值时,注意数据类型的字符和浮点数的赋值。给char数据类型赋初值有三种方法:字符、Unicode码以及ASCII码,其中初值为字符、Unicode码格式时,必须在字符的左右两边各加上单引号“'”。如下所示:
char apple ='@'; //用字符表示方式来赋初值“@” char apple ='\u0040'; //用“@”字符对应的Unicode码格式来赋初值,即“\u0040” char apple =64; //用“@”字符对应的ASCII码“64”来赋初值,ASCII码用十进制数表示
在Java语言中,标识符(Identifier)用来命名变量、常数、类、接口、方法,标识符是用户自行命名的文字串,由英文大小写字母、数字或下画线“_”等符号组合而成,变量命名有一定的要求与规则:
·必须为合法的标识符,变量名的第一个字符必须是字母、$或“_”中的一种。变量名的第一个字符之后可以是字母、$、数字或“_”等,而且变量名最长可以有255个字符。另外,在Java中,变量名中字母大小写的不同会被视为不同的变量。例如,M16与m16其实表示两个不同的变量。
·变量名不可以是关键字(Keyword)、保留字(Reserved Word)、运算符以及其他一些特殊字符,如int、class、+、-、*、/、@、#等。在Java语言中,关键字由具有明确意义的英文单词组成,这些单词被赋予了构建程序的功能,如声明变量数据类型、程序的流程控制、表示布尔值等。Java语言中共有52个关键字,在使用时必须注意每一个关键字中的英文字母全为小写。表2-6所示是按功能分类的Java关键字。
表2-6
·在同一个作用域(scope)内,变量名必须是独一无二的;处于不同作用域时,变量名可以相同。注意:变量的作用域就是指变量的有效范围。
虽然变量的命名从语法上讲只需要遵守上面的三个主要规则即可,但是在实际应用中,建议大家参考各个研发公司所制定的有关Java程序编写的规范,因为如果大家都能遵守这些惯用的命名法,所编写而成的程序就可以维持一致性,无论是在程序的阅读或维护上都较容易。下面列出编写程序时建议的几个重要规范。
·不取无任何含义的变量名称:在为变量命名时,还必须考虑一个重要原则,就是尽量使用有明确含义的名称,避免无任何含义的变量名称,如abc。尽量使用有代表意义的名称,有明确含义的名称可以突显变量在程序中的用途,让程序代码易于理解、查错、调试以及日后的维护。例如可以把存储“姓名”的变量命名为name,把存储“成绩”的变量命名为score等。
·注意变量名中字母的大小写:在Java程序中有一个不成文的规则,通常变量名是以小写英文字母作为开头的,再接上一个大写字母开头且有含义的单词,例如存储“用户密码”的变量命名为userPassword。
表2-7列举了不同的命名结果,并说明了这些命名是否合乎Java语言的命名规则。
表2-7
在变量声明方面,Java与其他的程序设计语言最大的不同在于它舍弃了定义“常数”的声明,因此并不存在所谓的常数类型。不过,程序开发人员仍然可以使用Java关键字final来定义常数。final关键字的作用是强调在此关键字后面的各种对象不能再被覆盖、覆写或重新定义。使用final关键字声明常数的方式如下:
final 数值类型常数名称 = 初始值;
例如:
final float PI = 3.1415926;
因为常数是一种固定、不会变动的数值,例如圆周率(PI)、光速(C)等,所以它的使用范围通常包括整个程序。因此常数经常被声明为类的成员,也就是所谓的成员数据,为了与普通变量有所区分,常数的命名大多是使用大写英文字母。
下面的范例程序实现了相对论公式的计算。我们定义了一个常数C(光速)以及两个变量m(质量)与e(能量),通过这个范例程序我们来了解变量与常数的声明方式。
【范例程序:CH02_05】
01 // CH02_05.java,变量与常数的声明 02 public class CH02_05 { //声明常数C(光速) 03 final static double C = 2997924581.2; 04 public static void main(String args[]) { 05 //声明变量e与m 06 int m; 07 double e; 08 //给变量赋值 09 m = 10; 10 e = m * C * C; 11 //输出到屏幕上 12 System.out.println("当质量为:" + m); 13 System.out.println("所释放出的能量为:" + e); 14 } 15 }
【程序的执行结果】
程序的执行结果可参考图2-8。
图2-8