static修饰成员变量的特点及static修饰成员变量内存图解-java se进阶 day01
1.static介绍
static是静态的意思,它可以用于修饰成员变量和成员方法
2.static的特点
1.被static修饰了的成员变量,可以被类中的所有对象所共享
虽然stu02没有给school赋值,但是我们用stu02调用时依旧成立,并且打印了南昌交通学院,因为school被共享了,恰好stu01又为其赋值了
2.被static修饰的成员变量,可以通过类名进行调用
上图中,stu01调用school出现了警告,正是因为我们没有通过类名调用
推荐使用类名调用被static修饰的成员变量!
3.随着类的加载而加载,优先于对象存在
在对象还未创建前,被static修饰的成员变量就已经存在了,也就意味着可以调用
3.static修饰成员变量的使用场景和内存图解
1.何时才要使用static修饰成员变量呢?
答:当数据要被共享时,就可以使用static。
比如在为一个学校专门制作项目时,所有的学生都是该学校的,这时就可以使用static修饰学校进行共享
或者和同事一起制作项目,在登录人数上要进行共享,当同事登录时,登录人数要在我们的电脑上加一,而我们退出时,登录人数也要随之减一
2.内存图解
Static Test1、main先存入方法区,main方法自动进栈
往下执行碰到user.onlineNumber(登录人数)做了一个++的操作,static第三个特点的前半段就显现了,被static修饰的成员变量随着类的创建而创建,当User进入方法区后,onlineNumber也会随之加载进堆内存,初始值为0,但是自加后变为1
接着往下走,创建u1对象,有new进堆,产生地址,为其赋值,将地址交给u1
走完上一步,还没那么快走下一步,User对象与User类的内存空间存在联系,u1对应的对象空间可以找到User类的空间
这时,打印,u1根据地址找到对象空间,然后对象空间又可以找到类空间,将其全部打印
.
继续往下走,onlineNumber再次加1,然后创建u2对象,有new进堆,产生地址和空间,赋值后,对象空间找到类空间,这时就体现了被static修饰的成员变量会被类中的对象共享这一特点,最后把地址给u2,打印
完整流程:https://kdocs.cn/l/cgeGmWGWPAb1?linkname=150996254