当前位置: 代码迷 >> 综合 >> Java中成员变量、局部变量、静态变量的区别,静态变量详解
  详细解决方案

Java中成员变量、局部变量、静态变量的区别,静态变量详解

热度:54   发布时间:2024-01-09 01:55:37.0

目录

  • 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. 否则就定义为局部变量。
  相关解决方案