【精致Java教程】27:变量的作用域

在常量、变量与运算符(一)这篇文章中提到过变量有三个属性:变量名,数据类型和作用域。因为那会还没讲分支结构和方法所以作用域还没有介绍。

【精致Java教程】27:变量的作用域_第1张图片

要解释变量的作用域其实就两点

  • 声明语句所在的{ }内才可用

示例代码:

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下方。

编译出错:


Coverage.java:12: 错误: 找不到符号
System.out.println(s2);
^
符号: 变量 s2
位置: 类 Coverage
1 个错误

找不到s2,但是s1并不会报错。所以说成员变量无论放在类的哪个位置,所有方法均可使用。但是方法内的局部变量的作用域是至上而下的,只有声明语句的下文可用。例如上面的例子中s2不能在其上的switch代码块使用,但是可以在其下的if结构内和for循环里使用。

本文所用代码:百度网盘

你可能感兴趣的:(【精致Java教程】27:变量的作用域)