Java 的作用域主要围绕变量展开(方法、类的作用域可看作更大范围的延伸),核心规则是:变量的作用域由声明它的 {}(代码块)决定,作用域内可访问,作用域外不可访问

1. 局部作用域(方法 / 代码块内)
  • 定义:在方法、循环、if 语句等 {} 内声明的变量(局部变量),作用域仅限于当前代码块。
  • 特点:必须手动初始化,仅在代码块执行期间存在,外部无法访问。

java

运行

public class ScopeDemo {
    public static void main(String[] args) {
        // 局部变量:作用域是整个main方法
        int a = 10;
        
        if (a > 5) {
            // 局部变量:作用域仅在if的{}内
            int b = 20;
            System.out.println(a + b); // 能访问a和b,输出30
        }
        // System.out.println(b); // 报错:无法访问b,超出作用域
    }
}
2. 成员作用域(类级)
(1)实例变量(非 static)
  • 定义:在类中、方法外声明的非 static 变量,作用域是整个类(所有实例方法)。
  • 特点:属于对象,创建对象后才能访问,不同对象的实例变量相互独立。

java

运行

public class ScopeDemo {
    // 实例变量:作用域是整个类
    String name = "Java";
    
    public void show() {
        System.out.println(name); // 能访问,输出Java
    }
}
(2)类变量(static)
  • 定义:用 static 修饰的成员变量,作用域是整个类(包括静态方法)。
  • 特点:属于类,无需创建对象即可访问,所有对象共享同一个值。

java

运行

public class ScopeDemo {
    // 类变量:作用域是整个类
    static int age = 25;
    
    public static void test() {
        System.out.println(age); // 能访问,输出25
    }
}
3. 方法参数作用域
  • 定义:方法的参数变量,作用域仅限于当前方法内部。

java

运行

public class ScopeDemo {
    public static void add(int x, int y) {
        // x和y的作用域仅在add方法内
        int sum = x + y;
        System.out.println(sum);
    }
    
    public static void main(String[] args) {
        add(3, 5); // 输出8
        // System.out.println(x); // 报错:无法访问参数x
    }
}
4. 注意:作用域的 “屏蔽效应”

当局部变量与成员变量同名时,局部变量会屏蔽成员变量(优先访问局部变量),可通过this(实例变量)或类名(类变量)区分:

java

运行

public class ScopeDemo {
    String name = "全局";
    
    public void test() {
        String name = "局部";
        System.out.println(name); // 输出“局部”(局部屏蔽全局)
        System.out.println(this.name); // 输出“全局”(指定访问实例变量)
    }
}

总结

  1. Java 作用域核心是 “{} 决定范围”,局部变量作用域最小,类变量作用域覆盖整个类;
  2. 局部变量必须初始化,成员变量有默认值(如 int 默认 0、String 默认 null);
  3. 同名变量遵循 “局部屏蔽全局”,可通过this/类名显式访问成员变量。
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐