3.1.2 变量名
程序是用变量名来引用变量数值的。比如,当显示largestByte变量的数值的时候,MaxVariablesDemo程序就使用名字largestByte。一个名字,比如largesByte包含了一个单一的标识符,被称为简单的名字(即变量名)。在JAVA编程语言中,对于变量名有下面的必须满足:
它必须是一个合法的标识符。一个标识符是以字母开头的一串Unicode字符。
它必须不是一个关键字、布尔型字符(true或者false)或者保留字NULL。
它必须在作用域中是唯一的。在不同的作用域才允许存在相同名字的变量。在一些条件下,如果变量被定义在一个嵌套的代码块中,它可能和其它变量共享相同的名字。这点在以后的教程中会提到。
这里有个约定:变量名是以小写字母开头,而类名是以一个大写字母开头的。如果变量名包含了多个单词,而每个单词要组合在一起,则在每个单词的第一个字母大写,比如IsVisible。而下划线(_)可以处在变量的任何地方,但是一般地它只用在常数中分离单词,因为常数名都是用大写字母的,利用下划线可以看得更清除。
3.1.3 作用域
变量的作用域是一个程序的区域,在上面变量可以通过它的名字来引用。其次,作用域也决定什么时候系统为变量创建和清除内存。作用域只应用成员变量并决定是否变量可以从所在类的外部使用。在程序中变量声明的位置建立它的作用域并且将它放置到以下四类之一:
成员函数作用域
当地变量作用域
方法参数作用域
异常处理参数作用域
(图14)
如图14所示。成员变量示类或者对象的成员。它是在类中定义而不在任何方法或者构造函数中定义。成员函数的作用域是类的完全定义。但是,当成员是使用在成员初始化表达式中的时候,成员的定义需要在它使用之前出现。在后面的教程中我们要再深入学习成员变量,这里就不讲了。
你可以在一个代码块中定义当地变量。总的说来,当地变量的作用域从它的声明扩展到了它被定义的代码块结束。在MaxVariablesDemo中,定义在主方法中的所有变量都是当地变量。程序中的每一个变量的作用域从变量的定义扩展到了主方法的结束,它在程序代码中是用右括号}来指示的。
参数是方法或者构造函数的正式参数,它们用于传递数值给方法和构造函数。参数的作用域是整个方法或者构造函数。
异常处理参数跟参数很相似,差别在是前者是传递参数给异常处理而后者是传递给方法或者构造函数。异常处理参数的作用域处在{和}之间的代码,它紧跟着catch语句。利用异常来处理错误向你说明了怎样编写一个带有参数的异常处理。以下是一个代码例子:
if (...) {
int i = 17;
...
}
System.out.println("The value of i = " + i); // 错误
最后的行不汇编因为当地变量I已经出了作用域。i的作用域是处在{和}之间的代码块。变量I在右括号}之后就不存在了。改正的方法可以是讲变量的声明移到if语句块的外面,或者是将println方法调用移动到if语句块中。
3.1.4 变量初始化
当地变量和成员变量可以利用一个赋值语句来初始化。变量的数据类型必须与赋给它的数值的数据类型相匹配。下面程序中的当地变量声明,其初始化如下:
// 整型
byte largestByte = Byte.MAX_VALUE;
short largestShort = Short.MAX_VALUE;
int largestInteger = Integer.MAX_VALUE;
long largestLong = Long.MAX_VALUE;
// 实数型
float largestFloat = Float.MAX_VALUE;
double largestDouble = Double.MAX_VALUE;
// 其它类型
char aChar = 'S';
boolean aBoolean = true;
参数和异常处理参数不能利用这种方法来初始化。它的参数的数值只能通过来设置。