静态变量与局部变量的对比

一 变量的分类

按数据类型分为:基本数据类型、引用数据类型

按类中声明的位置分为:成员变量(类变量,实例变量)、局部变量

  • 类变量:linking 的 prepare阶段,给类变量默认赋值,initial 阶段给类变量显示赋值,即静态代码块赋值

  • 实例变量:随着对象创建,会在堆空间中分配实例变量空间,并进行默认赋值。

  • 局部变量:在使用前必须进行显式赋值,不然编译不通过。

二 说明

成员变量在使用前,都经历过默认初始化赋值。

局部变量在使用前,必须经过显示赋值,否则编译不通过。

三 实战

    public void test5Temp() {
        int num;
        // System.out.println(num); // 错误信息:变量 num 未进行初始化
    }

这样的代码是错误的,没有赋值不能够使用。

四 点睛

参数表分配完毕之后,再根据方法体内定义的变量的顺序和作用域分配。

我们知道类变量表有两次初始化的机会,第一次是在“准备阶段”,执行系统初始化,对类变量设置零值,另一次则是在“初始化”阶段,赋予程序员在代码中定义的初始值。

和类变量初始化不同的是,局部变量表不存在系统初始化的过程,这意味着一旦定义了局部变量则必须人为的初始化,否则无法使用。

在栈帧中,与性能调优关系最为密切的部分就是前面提到的局部变量表。在方法执行时,虚拟机使用局部变量表完成方法的传递。

局部变量表中的变量也是重要的垃圾回收根节点,只要被局部变量表中直接或间接引用的对象都不会被回收。


版权声明:本文为chengqiuming原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
THE END
< <上一篇
下一篇>>