ITEEDU

入门准备

接触对象

对象导向

资源管理

对象容器(Container)

输入输出(I/O)

执行绪(Thread)

反射(Reflection)

metadata

数据库(JDBC)

舍遗补缺

Java Gossip: 变 数、常数

数据是储存在内存中的一块空间中,为了取得数据,您必须知道这块内存空间的位置,然而若使用内存地址编号的话相当的不方便,所以使用一个明确的名称 代表储存在内存中的数据,变量(Variable)是一个指向数据储存空间的参考,您将数据指定给变量,就是将数据储存至对应的内存空间,呼叫变量, 就是呼叫对应的内存空间的数据供您使用。

在Java中要使用变量,必须先宣告变量名称与数据型态,例如:

int intNum;?// 宣告一个整数变量 
double dblNum;?// 宣告一个倍精度浮点数变量 

就如上面所举的例子,我们使用int、float、double、char等关键词 (Keyword)来宣告变量名称并指定其数据型态,变量在命名时有一些规则,它不可以使用数字作为开头,也不可以使用一些特殊字符,像是 *&^%之类的字符,而变量名称不可以与Java 内定的关键词同名,例如int、float、class等等。

变量的命名有几个风格,主要以清楚易懂为主,初学者为了方便,当使用一些简单的字母来作为变量名称,这会造成日后程序维护的困难,命名变量时发生同名的情 况也会增加。

在过去曾流行过匈牙利命名法,也就是在变量名称前加上变量的数据型态名称缩写,例如intNum用来表示这个变量是int整数数据型态,fltNum表示 一个float数据型态,然而随着现在程序的发展规模越来越大,这种命名方式已经不被鼓励。

过去的程序在撰写时,变量名称的长度会有所限制,但现在已无这种困扰,因而现在比较鼓励用清楚的名称来表明变量作用,通常会以小写字母作为开始,并在每个 单字开始时第一个字母使用大写,例如:

int ageForStudent; 
int ageForTeacher;

像这样的名称可以让人一眼就看出这个变量的作用,这样的命名方式,在Java程序设计领域中是最常看到的一种。

变量名称可以使用底线作为开始,通常使用底线作为开始的变量名称,表示它是私用的 (Private),只在程序的某个范围使用,外界并不需要知道有这个变量的存在,通常这样的变量名称常用于对象导向程序设计中类别的私有成员(Private member),这样的命名方式在Java中偶而也 会看到(比较常见于C++的程序撰写中),一个宣告的例子如下:

double _window_center_x;
double _window_center_y; 

 
当您在Java中宣告一个变量,就会配置一块内存空间给它,这块空间中原先可能就有数据,也因此变量在宣告后的值是不可预期的,Java对于安全性的要 求极高,您不可以宣告变量后,而在未指定任何值给它之前就使用它,编译器在编译时会回报这个错误,例如若宣告变量var却没有指定值给它,则会显示以下讯 息:

variable var might not have been initialized

可以的话,尽量在变量宣告后初始其值,您可以使用「指定运算子」 (Assignment operator)=来指定变量的值,例如:

int ageForStudent = 0; 
double scoreForStudent = 0.0; 
char levelForStudent = 'A'; 

上面这段程序在宣告变量的时候,同时指定变量的储存值,而您也看到如何指定字符给字符变量,字符在指定时需使用引号 ' ' 来包括;在指定浮点数时,会习惯使用小数的方式来指定,如0.0,在Java中写下0.0这么一个常数的话,其预设为double数据型态。

在宣告变量之后,您可以直接呼叫变量名称来取得其所储存的值,下面这个程序是个简单的示范:

UseVariable.java
public class UseVariable {
	public static void main(String[] args) {
		int ageForStudent = 5;
		double scoreForStudent = 80.0;
		char levelForStudent = 'B';
		System.out.println("年级\t 得分\t 等级");
		System.out.printf("%4d\t %4.1f\t %4c",
		ageForStudent,
		scoreForStudent,
		levelForStudent);
	}
}

执行结果:

年级     得分    等级
5       80.0     B

在Java中写下一个数值,称之为字面常量(Literal constant), 它会存在内存的某个位置,您无法改变它的值;而在使用变量的时候,也会使用一种叫「常数」的变量,严格来说它并不是常数,只不过指定数值给这个变量之 后,就不可再改变其值,有人为了区分其与常数的差别,还给了它一个奇怪的名称:「常数变数」。

先不要管「常数变量」这个怪怪的名称,其实它终究是个变量而已,只是在宣告变量名称的同时,加上"final"来限定,只不过这个变量一但指定了值,就不可以再改变它的值,如 果程序中有其它程序代码试图改变这个变量,编译器会先检查出这个错误,例如:

final int maxNum = 10; 
maxNum =20;

这一段程序代码中的maxNum变量使用final来限定,所以它在指定为10之后,就不可以再指定值给它,所以第二次指定会被编译器指出错误:

cannot assign a value to final variable maxNum

使用final来限定的变量,目的通常就是不希望其它的程序代码来变动它的值,例如用于循环计数次数的指定(循环之后就会学到),或是像圆周率PI的指定。