2.3 变量
2.3.1 变量概述

变量是程序中的基本存储单元,与常量类似,变量也可分为下述类型:
1.整型变量
Java中可使用的整型变量有四种类型,它们分别是:byte、short、int和long。各种整型变量所占内存的位数及其表示范围如表2ˉ5所示。

2.3 变量_java

对于Java的整型变量来说,int类型是最常用的一种数据类型,它所表示的数据范围足够大而且适合于32位、64位处理器。一旦计算过程超出了int类型所表示的范围,便应使用long类型。
由于不同的机器对于多字节数据的存储方式各不相同,有些可能从低字节向高字节存储,有些则可能从高字节向低字节存储,所以特别在进行分析网络协议或文件格式这样的工作时,为了解决不同机器上的字节顺序存储问题,用byte类型来表示数据是合适的。但若是用于计算,由于其表示的数据范围很小,则容易造成溢出。
由于short类型数据限制数据的存储为先高字节,后低字节,因此在某些机器上会引起出错,故很少使用。Java不提供任何无符号整数类型。
2.实型变量
实型变量类型有float和double两种,各种实型变量所在内存的位数及其表示范围如表2ˉ6所示。 

2.3 变量_java_02

使用实型变量进行运算时,双精度类型(double)比单精度类型(float)具有更高的精度和更大的表示范围,因而被经常使用。但在运算精度要求不太高的情况下,使用float类型则有速度快、占用存储空间小的优点,因此也是值得考虑的。
3.字符变量
字符变量的类型为char,它在内存中占16位,其取值范围为0~65535。
Java中的字符数据集属于Unicode字符集,是16位无符号型数据,例如0x0061表示字符′a′,也就是十进制数97。
4.布尔型变量
Java的布尔型变量的取值范围只有两个值:false(假)和true(真)。在内存中占1位。布尔型变量又称为逻辑型变量,一般用于逻辑测试,在程序的流程控制中的使用率相当高。

2.3.2 变量的定义及赋值
Java程序是用变量名来引用变量数值的,因此对Java的变量名的命名方式进行规范相当重要。Java规定:变量在使用之前,必须先经过定义(或者也称为声明),变量定义形式如下:    
type<变量名>[=<变量初值>][,<变量名>[=<变量初值>]];
其中type即为变量数据类型名。多个同类型变量可以同时定义,中间用逗号分隔。
变量名定义约定:变量名以小写字母开头(而类名是以一个大写字母开头的),如果变量名包含了多个单词,而每个单词要组合在一起,则第一个单词的第一个字母小写,后面的每个单词的第一个字母大写,比如isVisible。而下划线()可以处在变量的任何地方,但是一般地它只用在标识符常量中分离单词。一般来说,变量名不宜太简单,但也不宜过长。
变量一旦经过定义,便可进行赋值,变量的赋值方式一般有两种形式:1)可以在定义同时进行赋值,如定义式;2)在接下去的程序体中进行赋值。变量赋值的形式如下:    
<变量名>=<变量值>
下面例题描述了变量的定义及赋值方式。
例2.3.1 变量的定义示例。 

2.3 变量_java_03

2.3 变量_java_04

2.3.3 变量的作用域
变量的定义不但包括变量名和变量类型,同时还包括它的作用域,变量的作用域指明可以访问该变量的程序代码的范围。按作用域来分,变量可分为以下几种:局部变量、成员变量、方法参数和异常处理参数。
局部变量定义在方法中或方法内的一个代码块中,其作用域为它所在的代码块。局部变量必须初始化。
例如,在方法中定义变量:   

2.3 变量_java_05

变量a的作用域为界定方法体的两个大括号{}之间的区域。在方法内的一个代码块中定义变量时:    

2.3 变量_java_06

变量i的作用域为for循环所确定的一对大括号{}(加下划波浪线部分)之间的区域。成员变量定义在类里面,但不在类里面的某个方法中,其作用域为整个类。关于类成员变量的概念将在第4章中向大家作进一步介绍。
方法参数用于将方法外的数据传递给方法,其作用域就是方法的方法体。关于方法参数的概念将在第3章中向大家作进一步介绍。
异常处理参数是将数据传递给异常处理代码,其作用域是异常处理部分。关于异常处理参数的概念将在第6章中向大家作进一步介绍。

2.3.4 变量的默认值
我们在定义变量时若不赋予变量初值,Java会给予变量一个默认值。表2ˉ7列出了各种不同数据类型的默认值。

2.3 变量_java_07

对基本数据类型变量赋予默认值的工作方式确实对程序员编写程序带来不少的便利,但是如果过于依赖系统给予变量的初值,反而不容易检测到是否已经给予变量应有的值,因此需要引起大家注意这个问题。同时还应注意:Java对基本数据类型变量赋予默认值不适用于局部变量,局部变量必须自行赋初值。