学过C/C++的人应该知道这段代码是不会报错的,因为C/C++里面的局部变量可以覆盖比它更大范围的变量。
// C代码
void func(int a)
{
int i;
for(int i=0; i<a; i++)
{
//
}
}
但是在Java中,这段代码会报错 java: 已在方法 func(int)中定义了变量 i。 因为:
- 通常,一组大括号 { } 定义一个范围。
- 在 Java 中,我们通常可以访问一个变量,只要它定义在与我们正在编写的代码相同的一组括号内,或者在定义变量的大括号内的任何大括号内。
- 在任何方法之外的类中定义的任何变量都可以由所有成员方法使用。
- 当一个方法具有与成员相同的局部变量时,可以使用“this”关键字来引用当前类变量。
- 对于在循环终止后要读取的变量,必须在循环体之前声明。
// Java代码
public class Test {
public static void main(String[] args) {
func(5);
}
static void func(int a){
int i;
for(int i=0; i<a; i++){
System.out.println(i+1+" ");
}
}
}