目录

  • 1 成员变量、局部变量和静态变量
  • 2 静态变量的特点及注意事项
  • 1 特点
  • 2 注意事项
  • 3 什么情况下使用静态变量
  • 3 总结


1 成员变量、局部变量和静态变量

成员变量:在类中且在方法外定义的变量称为成员变量;

局部变量:方法中、方法的形参或代码块中定义的变量,都属于局部变量;

静态变量:如果一成员变量有static关键字修饰,则该变量被称为静态变量。

成员变量

局部变量

静态变量

定义位置

类中,方法外

方法中、方法的形参或代码块内

类中,方法外

初始化值

有默认初始化值

无,先定义,赋值,最后使用

有默认初始化值 (类初次加载时进行初始化)

调用方式

对象调用


对象调用,类名调用

存储位置



方法区

生命周期

与对象共存亡

与方法共存亡

与类共存亡

别名

实例变量


类变量

2 静态变量的特点及注意事项

1 特点

  1. 有static修饰符;
  2. 随着类的加载而加载,优先于对象存在;
  3. 可以直接被类名调用,即多了一种调用方式:类名.静态变量;
  4. 其内存空间对所有该类的实例是共享的,实现了数据共享。

2 注意事项

  1. 如果变量是对象特有的,不应当被静态修饰。因为那样的话,特有变量会变成对象的共享变量,这样对事物的描述就出了问题。因此,在定义静态时,必须要明确,该变量是否是被对象所共享的。
  2. 静态方法只能访问静态成员(包括静态方法、静态变量、静态代码块),不可以访问非静态成员。因为静态方法加载时,先于对象存在,所以没有办法访问对象中的成员。
  3. this()和super()都指的是对象,所以,均不可以在static环境中使用。包括:static变量,static方法,static语句块。

3 什么情况下使用静态变量

静态变量实现了内存共享,节省了内存开销,但由于其生命周期太长,不易被回收,使用不合理反而会造成内存浪费,因此建议在满足以下条件时使用。

  1. 变量所在对象体积较大,占用内存较多;
  2. 变量所在对象生命周期较长;
  3. 变量所在对象数据稳定;
  4. 该类的实例有对该变量的共享需求。

3 总结

  1. 如果一个变量能够用来描述一个类的属性,就定义为成员变量;
  2. 如果一个变量应被所有对象共享,就把这个变量用static来修饰,即为静态变量;
  3. 否则就定义为局部变量。