1.变量分为成员变量和局部变量。成员变量是类的属性,又称为field。局部变量定义在方法或代码块内。
2.成员变量的生命周期从对象创建开始到对象销毁结束。
局部变量的生命周期从代码块的变量定义开始到代码块执行完毕结束。
3.属性和局部变量可以重名,访问时按照就近原则。
4.在同一个作用域中,两个局部变量,除非一个生命周期结束,否则不能重名。
下面第一个num变量生命周期未结束,但for循环里面又创建了一个num变量,就会报错变量在作用域中已定义。
public class Test {
public static void main(String[] args) throws IOException {
int num = 3;
for (int i = 0; i < 10; i++) {
int num = i;
}
// int num = 3;
System.out.println(num);
}
// public void test1(int num1){
// int num1
// }
}
调整一下外面int num = 3的位置
下面虽然有两个同名局部变量,但是for循环执行完毕后,变量生命周期已结束,所以可以定义。
在大的作用域内无法访问小的作用域中的变量的根本原因就是因为变量的生命周期不同。
public class Test {
public static void main(String[] args) throws IOException {
// int num = 3;
for (int i = 0; i < 10; i++) {
int num = i;
}
int num = 3;
System.out.println(num);
}
// public void test1(int num1){
// int num1
// }
}
另外,在switch分支结构中,不同的case是在同一个作用域内,所以定义同名的局部变量会报错,解决办法就是添加{}来缩小变量作用域。
switch (num) {
case 1:
{int num1 = 4;}
break;
case 2:
{int num1 = 4;}
break;
case 3:
break;
}