在常量、变量与运算符(一)这篇文章中提到过变量有三个属性:变量名,数据类型和作用域。因为那会还没讲分支结构和方法所以作用域还没有介绍。
![](https://img.haomeiwen.com/i323464/463ded0fff850ef9.png)
要解释变量的作用域其实就两点
- 声明语句所在的{ }内才可用
示例代码:
public class Coverage {
static String s1 = "s1"; // 整个类可用
public static void main(String[] args) {
String s2 = "s2"; // main方法内此行以下可用
switch (s1)
{
case "s1":
System.out.println(s1);
break;
case "s2":
System.out.println(s2);
break;
}
if (true) {
String s3 = "s3"; // 仅if结构内可用
System.out.println(s3);
}
for (int i = 0; i < 1; i++) {
String s4 = "s4"; // 仅for循环内可用
System.out.println(s4);
}
}
}
上述代码中,s1所在{ }包括了整个类,所以整个类都可访问。s2所在的{ }是包住了整个mian方法,所以整个main方法范围内都可用,同理s3仅if结构内可用,s4仅for循环内可用。
- 除成员变量外,在声明语句的下文才可用
示例代码:
public class Coverage {
public static void main(String[] args) {
switch (s1)
{
case "s1":
System.out.println(s1);
break;
case "s2":
System.out.println(s2);
break;
}
String s2 = "s2"; // main方法内此行以下可用
if (true) {
String s3 = "s3"; // 仅if结构内可用
System.out.println(s3);
}
for (int i = 0; i < 1; i++) {
String s4 = "s4"; //仅for循环内可用
System.out.println(s4);
}
}
static String s1 = "s1"; // 整个类可用
}
如上,我把s1放在类的最下方,把s2,放在switch下方。
编译出错:
<pre>
Coverage.java:12: 错误: 找不到符号
System.out.println(s2);
^
符号: 变量 s2
位置: 类 Coverage
1 个错误
</pre>
找不到s2,但是s1并不会报错。所以说成员变量无论放在类的哪个位置,所有方法均可使用。但是方法内的局部变量的作用域是至上而下的,只有声明语句的下文可用。例如上面的例子中s2不能在其上的switch代码块使用,但是可以在其下的if结构内和for循环里使用。
本文所用代码:百度网盘
网友评论