静态变量与局部变量

  • 参数表分配完毕后,再根据方法体内定义的变量的顺序和作用域分配。
  • 类变量有2次初始化机会,第1次是“准备阶段”,执行系统初始化,对类变量设置零值;还有1次是“初始化”阶段,赋予程序源在代码中定义的初始值。局部变量和类变量初始化不同的是,局部变量表不存在系统初始化过程,即一旦定义了局部变量必须要进行人为的初始化,否则将无法使用。
  • 局部变量在使用前,必须要经过显示赋值,否则编译通不过。在栈帧中,与性能调优最密切的就是局部变量表。在方法执行时,虚拟机使用局部变量表完成方法的传递。
  • 局部变量表中的变量也是重要的垃圾回收根节点,只要被局部变量表中直接或间接引用的对象都不会被回收。

例如下面的代码是错的没有赋值不能使用

public void test1( ){

  int m;

  system.out.println(m);

}

变量的分类:

  • 按照数据类型分为基本数据类型、引用数据类型
  • 按照在类中声明的位置分为:成员变量、局部变量,其中成员变量分为类变量和实例变量。成员变量在使用前都经历过默认的初始化赋值,类变量在链接中的准备阶段会给类变量默认赋值,到初始化阶段的时候会给类变量显式赋值即静态代码块赋值;实例变量是随着对象的创建会在堆空间中分配实例变量空间,并进行默认赋值。

方法中定义的局部变量是否线程安全?

当只有一个线程可以操作此数据,则必然是线程安全的;当有多个线程操作此数据,则此数据是共享数据,如果不考虑同步机制,会存在线程安全的问题。

posted @ 2020-09-06 18:45  Eleanor123  阅读(274)  评论(0编辑  收藏  举报