Java 变量作用域

本文最后更新于:2024年3月18日 凌晨

Java 变量作用域

  • 变量的作用域也称变量的有效范围,它是指程序中的一个区域,变量在其作用域内可以被访问,作用域也决定Java运行系统什么时候为变量创建和释放内存,根据变量在程序中声明的位置,可以将变量分为以下4种情形:
    • 成员变量:其作用域是整个类体,成员变量定义时系统会自动赋默认初值。
    • 局部变量:也称自动变量,是在方法内定义或者在一段代码块中定义的变量,方法中局部变量的作用域从它的声明位置扩展到它被定义的代码块结束,具体地说,方法体内定义的局部变量在整个方法内有效,而循环内定义的局部变量只在循环内有效。
      • 局部变量在定义时系统不会赋默认初值,因此在引用变量时要保证先赋值,但对于由基本类型构成的数组,系统会按基本类型的默认赋初值原则给每个元素赋默认初值,对于元素为引用类型的数组,则每个元素的默认初值为null
    • 方法参数:其作用域是整个方法。
    • 异常处理参数:跟方法参数的作用很相似,其作用范围是catch后面跟随的异常处理块,例如,以下代码段演示了对算术运算的异常检查,catch后面的小括号中定义了异常处理函数e,其只能在该catch的异常处理代码块中访问。
1
2
3
4
5
6
try{
int x = 5/0;
}
catch(ArithmeticException e){// 异常处理参数的有效范围。
System.out.println("产生异常: "+e);
}

[例5-2]变量的作用域举例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Scope{
int x = 1; // 成员变量x
int y; // 成员变量y

public void method(int a){ // 方法参变量在整个方法内有效。
int x = 8; // 本地变量将成员变量隐藏。
for(int x,i<a;i++) // 定义循环变量i
y++;
System.out.println("x="+x+",y="+y+",a="+a);
}

public static void main(String a[]){
Scope x = newScope(); // 方法内定义的局部变量。
x.method(6);
}
}

x=8,y=5,a=6
  • 说明:在method()方法内,定义了局部变量x,方法内访问的x均指此变量,但方法内访问的y则指对象的实例变量,定义的i为循环控制变量,该变量只在循环内有效。
  • 注意:在同一作用域不能定义两个同名变量,如方法中不能再定义一个与参数同名的变量,但不同作用域允许变量同名,例如method()方法内定义的局部变量x与成员变量同名,在方法内将隐藏同名的实例变量。

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!