Java学习笔记——静态变量/类变量详解(使用细节及内存分析)

静态变量/类变量的使用细节

定义语法:访问修饰符 static 数据类型变量名;static 访问修饰符数据类型 变量名;
访问方法:对象名.类变量名;或者类名.类变量名;(Java设计者推荐使用在这个方式)

使用细节:

  • 由于类加载时会在堆中创建一个对应的Class对象,也即类变量是随着类的加载而创建的,所以没有创建对象时也能访问。
  • 静态变量的访问修饰符的访问权限和范围和普通属性是一样的。
  • 类变量与实例变量(普通属性)的区别在于,类变量是该类的所有对象共享的,一个类只维护一份,因此静态成员不属于多态范畴,没有继承的说法。而实例变量是每个对象独享的。
  • 类变量的生命周期是随类的加载开始,随着类消亡而销毁。
  • 静态方法不具有多态性,所以也就不存在重写的说法,如果子类中静态方法的签名与父类中静态方法的签名相同,那么父类中的静态方法将被隐藏,而不是被重写。静态方法与变量是属于类的方法与变量。

比如说Manage extends Employee,则Manage也是一个Employee,所以子类能够调用属于超类的静态变量和方法。注意,子类调用的其实就是父类的静态方法和变量而不是继承自超类的静态方法与变量。但是如果子类中有同名的静态方法与变量,这时候调用的就是子类本身的,因为子类的静态变量与静态方法会隐藏父类的静态方法和变量。(这里可以简单的理解为子类“共享”了父类的静态成员,可以通过子类.静态成员调用父类的静态成员)

静态变量/类变量的内存布局

静态变量存储的位置与JDK版本有关系
静态变量存储于静态域,对于JDK7之前的版本,静态域在方法区
而对于JDK7以上版本,静态域存储于定义类型的Class对象(反射机制里的内容?暂时没学过)中的尾部,而Class对象存在中。

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值