静态变量与局部变量的对比
一 变量的分类
按数据类型分为:基本数据类型、引用数据类型
按类中声明的位置分为:成员变量(类变量,实例变量)、局部变量
-
类变量:linking 的 prepare阶段,给类变量默认赋值,initial 阶段给类变量显示赋值,即静态代码块赋值
-
实例变量:随着对象创建,会在堆空间中分配实例变量空间,并进行默认赋值。
-
局部变量:在使用前必须进行显式赋值,不然编译不通过。
二 说明
成员变量在使用前,都经历过默认初始化赋值。
局部变量在使用前,必须经过显示赋值,否则编译不通过。
三 实战
public void test5Temp() {
int num;
// System.out.println(num); // 错误信息:变量 num 未进行初始化
}
这样的代码是错误的,没有赋值不能够使用。
四 点睛
参数表分配完毕之后,再根据方法体内定义的变量的顺序和作用域分配。
我们知道类变量表有两次初始化的机会,第一次是在“准备阶段”,执行系统初始化,对类变量设置零值,另一次则是在“初始化”阶段,赋予程序员在代码中定义的初始值。
和类变量初始化不同的是,局部变量表不存在系统初始化的过程,这意味着一旦定义了局部变量则必须人为的初始化,否则无法使用。
在栈帧中,与性能调优关系最为密切的部分就是前面提到的局部变量表。在方法执行时,虚拟机使用局部变量表完成方法的传递。
局部变量表中的变量也是重要的垃圾回收根节点,只要被局部变量表中直接或间接引用的对象都不会被回收。
版权声明:本文为chengqiuming原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。