Java变量的作用域

    |     2015年3月30日   |   Java面向对象   |     0 条评论   |    1796

Java 里变量的作用域可以分成四级:类级、对象实例级、方法级、块级。能看见谁、活多久,全由定义位置决定。

类级变量用 static 修饰,有时被俗称为「全局变量」——其实它属于类,不叫真正的全局。类加载后就占内存,用类名就能访问,不必先 new。对象实例级就是成员变量,必须先实例化才分配、才能用。

一、四级作用域

方法级变量就是方法内部的局部变量。块级变量定义在一对大括号里,块结束就消失,例如 if、for 的花括号。

{
    int age = 3;
    String name = "www.weixueyuan.net";
    // 正确:块内部可以访问 age 和 name
    System.out.println(name + "已经" + age + "岁了");
}
// 错误:块外部无法访问 age 和 name
System.out.println(name + "已经" + age + "岁了");
级别 怎么声明 谁能看见
类级 static 字段 类名或任意实例;方法、块都能读
实例级 非 static 字段 先 new;实例方法、块都能读
方法级 方法内局部变量 本方法及其中的块;必须显式初始化
块级 { }、if、for 内 仅块内;必须显式初始化
  • 方法内部除了方法级变量,还能访问类级和实例级变量。
  • 块内部能访问类级、实例级;若块在方法里,还能访问该方法的局部变量。
  • 方法级和块级必须显式初始化才能使用(原文写成「显示」,应为「显式」)。实例字段可以不写初值,会有默认值,例如 int 为 0。

二、演示代码

类初始化时会跑一遍实例初始化块。下面的 j = 2 只活在那个块里,test1() 里的 j 是另一个局部变量。

public class Demo {
    public static String name = "新华苑";  // 类级变量
    public int i; // 实例级变量,默认 0

    {
        int j = 2; // 块级变量,出了这个初始化块就不能用
    }

    public void test1() {
        int j = 3;  // 方法级变量
        if (j == 3) {
            int k = 5;  // 块级变量,if 外面不能访问
        }
        System.out.println("name=" + name + ", i=" + i + ", j=" + j);
    }

    public static void main(String[] args) {
        System.out.println(Demo.name); // 不创建对象,直接用类名
        Demo t = new Demo();
        t.test1();
    }
}
// 运行结果:
// 新华苑
// name=新华苑, i=0, j=3

一句话总结:static 跟类走、成员跟对象走、局部跟方法走、块内变量出了花括号就没了。

转载请注明来源:Java变量的作用域
本文链接地址:https://ai.zhousir.top/?p=76
回复 取消