变量和数据类型
变量是程序语言中的名词,即它们是执行动作或被执行动作的
实体(值和数据)。countChars方法定义了两个变量 - count
和in。程序每次从变量in中读一个字符,然后count加1。这两
个变量的定义以黑体出现:
import java.io.*;
public class Count {
public static void countChars(Reader in)
throws IOException
{
int count = 0;
while (in.read() != -1)
count++;
System.out.println("Counted " + count + " chars.");
}
// ... main method omitted ...
}
变量定义包含两部分:变量的类型和变量名。变量定义的位置
决定了它的范围。
数据类型
Java语言中的所有变量都必须有数据类型。变量的数据类型决
定了变量可以包含的值和可以在其上进行的操作。例如,定义int
count定义count是一个整数。
Java语言中有两类数据类型:原始数据类型和参考数据类型。
下表按关键字类出了Java支持的所有原始数据类型、它们的大
小和格式和简单描述。
类型 |
大小/格式 |
描述 |
(integers)
|
byte |
8-bit two's complement |
Byte-length integer |
short |
16-bit two's complement |
Short integer |
int |
32-bit two's complement |
Integer |
long |
64-bit two's complement |
Long integer |
(real numbers)
|
float |
32-bit IEEE 754 Single-precision |
floating point |
double |
64-bit IEEE 754 Double-precision |
floating point |
(other types)
|
char |
16-bit Unicode character |
A single character |
boolean |
true or false |
A boolean value (true or false) |
原始数据类型的变量包含它的类型的单一值:数字、字符或布
尔值。例如,int的值是整数,char的值是一个16位的Unicode
字符。
数组、类和接口是参考数据类型。参考数据类型的值是对变量
表示的真实值或值的集合的参考。参考数据类型变量不是数组
或对象本身,而是到达它的一种方式。
countChars方法使用参考数据类型in - 一个Reader对象。当用
在语句或表达式中时,in指向对象的参考。因此可以用对象名
访问它的成员变量或它的方法。
变量名
程序通过变量名引用它的值。例如,当countChars方法希望引
用变量count的值时,只需简单地使用名字count。
变量的范围
变量的范围是变量可以被访问和确定变量什么时候被建立和破
坏的代码块。程序中的变量定义的位置建立了它的范围并使之
成为下面四种类型中的一种:
成员变量
局部变量
方法参数
例外处理参数
成员变量是类或对象中的一个成员。它可以在类中任何地方
定义,除了在方法中。它在类中对所有代码可用。Count类没有
定义成员变量。
可以在方法或方法的代码块中定义局部变量。在countChars
中,count是局部变量。count的范围,即可以访问count的代
码,从count的定义开始到countChars方法的结束。一般来说,
局部变量的范围从它的定义到它定义所在的代码块的结束为止。
方法参数变量和异常处理参数将在以后的课程中提到。
变量初始化
局部变量和成员变量可以在它们定义时用赋值语句初始化。赋
值语句两端的数据类型必须匹配。countChars方法在定义count时
初始化它为0:
int count = 0;
方法参数变量和异常处理变量不能以这种方法初始化。参数的
值被调用者设置。
Final变量
可以在任意范围内把变量定义为final,包括方法和构造函数的
参数。final变量的值在初始化后不能被改变。
final变量的定义方式如下:
final int aFinalVar = 0;
这句话定义了一个final变量并初始化它。以后如果给aFinalVar
赋值,将产生一个编译错误。有必要的话,可以推迟final变量的
初始化。可以定义一个变量,以后再初始化之:
final int blankfinal;
. . .
blankfinal = 0;
一个被定义但是还没初始化的final变量称为blank final(空的final)。