Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

成员变量、局部变量和静态变量的区别 #28

Open
DraperHXY opened this issue Jan 27, 2019 · 0 comments
Open

成员变量、局部变量和静态变量的区别 #28

DraperHXY opened this issue Jan 27, 2019 · 0 comments

Comments

@DraperHXY
Copy link
Owner

DraperHXY commented Jan 27, 2019

JVM 内存可以简单分为三个区

  • 堆区(heap) 用于存放所有对象,是线程共享的 (数组也属于对象)
  • 栈区(stack) 用于存放基本数据类型的数据和对象的引用,是线程私有的(分为虚拟机栈和本地方法栈)
  • 方法区(method) 用于存放类的信息、常量、静态变量、编译后的字节码等,是线程共享的(也被称为非堆,即 None-Heap,还叫静态存储区)

成员变量和局部变量的区别

成员变量

  • 成员变量定义在类中,在整个类中都可以被访问
  • 成员变量随着对象的建立而建立,随着对象的消失而消失,存在于对象所在的堆内存中
  • 成员变量有默认初始化值

局部变量

  • 局部变量只定义在局部范围内,函数内,语句内等,只在所属的区域内有效
  • 局部变量存在于栈内存中,作用的范围结束,变量空间会自动释放
  • 局部变量没有默认初始化值

成员变量和静态变量的区别

  • 两个变量的生命周期不同
    成员变量随着对象的创建而存在,随着对象被回收而释放
    静态变量随着类的加载而存在,随着类的消失而消失
  • 调用方式不同
    成员变量只能被对象调用。
    静态变量可以被对象调用,还可以被类名调用
  • 别名不同
    成员变量也被称为实例变量
    静态变量也被称为类变量
  • 数据存储位置不同
    成员变量存储在堆内存的对象中,所以也叫对象的特有数据
    静态变量数据存储在方法区(共享数据区) 的静态区,所以也叫对象的共享数据。
\ 成员变量 局部变量 静态变量
定义位置 在类中,方法外 方法中,或者方法的形参 在类中,方法外
初始化值 有默认初始化值 无,先定义,赋值后才能使用 有默认初始化值
调用方式 对象调用 对象调用,类名调用
存储位置 堆中 栈中 方法区
生命周期 与对象共存亡 与方法共存亡 与类共存亡
别名 实例变量 类变量
@DraperHXY DraperHXY changed the title JVM 成员变量、局部变量和静态变量的区别 Jan 27, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant