表达式语句
前面已经说过,某些 Java 表达式有副作用。也就是说,这些表达式不仅能计算得到的一个值,还能以某种方式改变程序的状态。只要表达式有副作用,在表达式后面加上分号就能作为语句使用。合法的表达式语句有赋值、递增和递减、方法调用以及对象创建。例如:
a = 1; // 赋值
x *= 2; // 带运算的赋值
i++; // 后递增
--c; // 前递减
System.out.println("statement"); // 方法调用语句,表示控制台打印
复合语句
复合语句是一些放在花括号里的语句,语句的数量和类型不限。Java 句法规定可以使用语句的地方都可以使用复合语句,例如:
for(int i = 0; i < 10; i++) {
a[i]++; // 这个循环体是一个复合语句
b[i]--; // 包括两个表达式语句
} // 放在花括号里
空语句
在 Java 中,空语句使用一个分号表示。空语句什么也不做,不过这种句法偶尔有用。例如,在 for 循环中可以使用空语句表明循环体为空:
for(int i = 0; i < 10; a[i++]++){ // 递增数组元素
} // 循环体是空语句
标注语句
标注语句就是有名称的语句。命名方法是,在语句前加上一个标识符和一个冒号。break和 continue 语句会用到标注。例如:
name1: for(int r = 0; r < rows.length; r++) { // 一个标注循环
name2: for(int c = 0; c < columns.length; c++) { // 另一个
break name1; // 使用标注
}
}
实际中要使用有意义的名称。
局部变量声明语句
局部变量经常直接称为变量,是值存储位置的符号名称,在方法和复合语句中定义。所有变量在使用之前必须先声明,声明变量的方法是使用声明语句。Java 是静态类型语言,声明变量时要指定变量的类型,而且只有这种类型的值才能存储在这个变量中。
变量声明语句最简单的形式只需指定变量的类型和名称:
int counter;
String s;
声明变量时还可以包含一个初始化表达式,用于指定变量的初始值。例如:
int i = 0;
String s = readLine();
int[] data = {x+1, x+2, x+3}; // 稍后会介绍数组初始化表达式
Java 编译器不允许使用未初始化的局部变量,所以,方便起见,通常会在一个语句中同时声明和初始化变量。初始化表达式不必是编译器能计算得到结果的字面量或常量表达式,也可以是程序运行时能计算出结果的任意复杂表达式。
一个变量声明语句可以声明和初始化多个变量,但是所有变量必须是同一类型。变量名称和可选的初始化表达式使用逗号分隔:
int i, j, k;
float x = 1.0, y = 1.0;
String question = "Really Quit?", response;
变量声明语句可以以 final 关键字开头。这个修饰符表明,为变量指定初始值之后,其值就不能改变了:
final String greeting = getLocalLanguageGreeting();
后面,尤其是讨论不可变编程风格时,还会说明 final 关键字。
局部变量只能在其定义所在的方法和代码块中使用,这叫变量的作用域或词法作用域。
void method(){ // 定义一个方法
int i = 0; // 声明变量i
while(i<10){ // 在这个作用域里可以使用i
int j=0; // 声明变量j;j的作用域从这里开始
i++; // 在这个作用域里可以使用i;递增i
} // j的作用域在这结束
System.out.println(i); // 在这个作用域里仍能使用i
} // i的作用域在这结束