java--static修饰成员变量

1.static

叫静态,可以修饰成员变量、成员方法。

2.成员变量按照有无static修饰,分为两种:

①类变量:有static修饰,属于类,在计算机里只有一份,会被类的全部对象共享(不管那个类调用的,都是使用这一个变量,用的都是同一个地址,使用你上面给它赋值,然后下一行代码有赋值,就是改变了他的内容,不管说不定同一个new出来的)。

②实例变量(对象的变量):无static修饰,属于每个对象的。

使用方法

3.成员变量的执行原理

①类变量:属于类,与类一起加载一次,在内存中只有一份,可以被类和类的所有对象共享

②实例变量:属于对象,每个对象中都有一份,只能用对象访问。

③分析过程:

运行第一行代码:class在方法区内加载Test.calss。

运行第二行代码:在栈内存中加载一个main空间。

运行第三行代码:在方法区加载Student.class,然后加载Student.calss内的成员变量,发现name是类变量,会在堆中加载一个单独属于static String name的空间,然后Student.class中的name就指向这个空间,然后将"袁华"赋值给static String name空间。

运行第四行代码:发现有new在栈中的main方法中创建一个为Student s1的空间,然后在堆内存中创建一个属于s1的空间,叫将地址值交给栈中的Studnet s1空间。

运行第五行代码:给s1的name赋值,就是给堆中static String name空间赋值,将原有的覆盖掉,然后他就变成了"马冬梅"。

运行第六行代码:发现有new,在栈内存的main空间内创建一个Student s2的空间,然后在堆内存中创建一个s2空间,将地址值给栈内存中的Student s2空间,使得栈内存中的Student s2空间指向堆内存中的s2空间。

运行第七行代码:给s2中的name赋值,就是给堆中static String name空间赋值,将原有的覆盖掉,然后他就变成了"秋雅"。

运行第八行代码:调用输出,s1的name,先会在栈内存中找到Student s1空间中的地址值,根据地址值找到堆内存中的s1空间,发现没有name,然后在根据地址找到方法区内的Student.class方法,找到name,然后根据name的地址值,找到堆内存中的static String name空间,然后将"秋雅"打印出来。

运行第九行代码:调用输出,s2的name,先会在栈内存中找到Student s2空间中的地址值,根据地址值找到堆内存中的s2空间,发现没有name,然后在根据地址找到方法区内的Student.class方法,找到name,然后根据name的地址值,找到堆内存中的static String name空间,然后将"秋雅"打印出来。

运行第十行代码:给s1中的age赋值,先找到栈内存中的Student s1空间,然后根据地址值找到堆内存中的s1空间,给int age赋值为23.

运行第十一行代码:给s2中的age赋值,先找到栈内存中的Student s2空间,然后根据地址值找到堆内存中的s1空间,给int age赋值为18.

运行第十二行代码:打算输出:s1的age,先在栈内存中找到Student s1空间,然后根据地址值找到堆内存中的s1空间,然后将int age的值打印出来。

最后退出运行。

4.类变量的应用场景

在开发中,如果某个数据只需要一份,且希望能够被共享(访问,修改),则该数据可以定义成立类变量来记住。

注意:在同一个类中,访问自己类的类变量,才可以省略类名不写。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值