Java局部变量的用法(非常详细)
在 Java 程序中,如果在成员方法内定义一个变量,那么这个变量被称为局部变量。
实际上,方法中的形参也可作为一个局部变量。例如:
局部变量是在方法被执行时创建,在方法执行结束时被销毁。局部变量在使用时必须进行赋值操作或被初始化,否则会出现编译错误。
【实例】交换两个整数的值。在 ChangeDemo 类中创建静态的 exchange() 方法,该方法可以将数组参数 arr 的前两个元素值进行互换,通过在方法中定义一个保存临时数据的局部变量 tmp,利用 tmp 交换两个元素的值。
下图描述了局部变量的作用范围:

图 1 局部变量的作用范围
在相互不嵌套的作用域中可以同时声明两个名称和类型都相同的局部变量,如下图所示:

图 2 在互不嵌套区域可以定义相同名称和类型的局部变量
但是在相互嵌套的区域中不可以这样声明,如果将局部变量 id 在方法体的 for 循环中再次进行定义,那么编译器将会报错,如下图所示:

图 3 在嵌套区域中不可以定义相同名称和类型的局部变量
注意,在作用范围外使用局部变量是一个常见的错误,因为在作用范围外没有声明局部变量的代码。
实际上,方法中的形参也可作为一个局部变量。例如:
public class Book { // 类 private String name; // String 类型的成员变量 public String getName() { // name 的 Getter 方法 return name; } public void setName(String name) { // name 的 Setter 方法 this.name = name; // 将参数值赋予类中的成员变量 } }在 Book 类中定义了 setName(String name) 方法,String name 这个形参就被看作是局部变量。
局部变量是在方法被执行时创建,在方法执行结束时被销毁。局部变量在使用时必须进行赋值操作或被初始化,否则会出现编译错误。
【实例】交换两个整数的值。在 ChangeDemo 类中创建静态的 exchange() 方法,该方法可以将数组参数 arr 的前两个元素值进行互换,通过在方法中定义一个保存临时数据的局部变量 tmp,利用 tmp 交换两个元素的值。
public class ChangeDemo { public static int[] exchange(int[] arr) { int tmp = arr[0]; // 创建局部变量 tmp,保存数组第一个元素的值 arr[0] = arr[1]; // 第二个元素值被赋予第一个元素 arr[1] = tmp; // 第二个元素值被改为 tmp return arr; } public static void main(String[] args) { int arr[] = { 17, 29 }; System.out.println("第一个值=" + arr[0] + ",第二个值=" + arr[1]); arr = exchange(arr); System.out.println("第一个值=" + arr[0] + ",第二个值=" + arr[1]); } }运行结果如下:
第一个值=17,第二个值=29
第一个值=29,第二个值=17
Java局部变量的有效范围
可以将局部变量的有效范围称为变量的作用域,局部变量的有效范围从该变量的声明开始到该变量的结束为止。下图描述了局部变量的作用范围:

图 1 局部变量的作用范围
在相互不嵌套的作用域中可以同时声明两个名称和类型都相同的局部变量,如下图所示:

图 2 在互不嵌套区域可以定义相同名称和类型的局部变量
但是在相互嵌套的区域中不可以这样声明,如果将局部变量 id 在方法体的 for 循环中再次进行定义,那么编译器将会报错,如下图所示:

图 3 在嵌套区域中不可以定义相同名称和类型的局部变量
注意,在作用范围外使用局部变量是一个常见的错误,因为在作用范围外没有声明局部变量的代码。