首页 > 系统相关 >static修饰成员的特点及static修饰成员变量内存图解-java se进阶 day01

static修饰成员的特点及static修饰成员变量内存图解-java se进阶 day01

时间:2024-12-21 11:30:32浏览次数:3  
标签:调用 变量 对象 成员 static 修饰

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

标签:调用,变量,对象,成员,static,修饰
From: https://www.cnblogs.com/zhishi6/p/18620577

相关文章

  • 【C++有点难】默认成员函数:构造函数
    默认成员函数有啥?总的来说嘞,有六种:构造函数,析构函数,拷贝构造函数,赋值重载函数,取地址重载函数其实我刚知道有六种的时候,也是很头大,但经过我不但地旁敲侧击,终于!我逐渐明白第一种:构造函数的神奇那学习之前,肯定要了解一下构造函数的概念吧?构造函数的概念:构造函数作为一种默认......
  • 成员属性
    成员属性用于保护成员变量为成员属性的获取和赋值添加逻辑处理解决了privatepublicprotected的局限性属性可以让成员变量在外部只能获取不能修改或者只能修改不能获取成员属性的基本语法//访问修饰符属性类型属性名//{//get{}//set{}//}classPerson{pr......
  • 【java面向对象编程】第二弹----成员方法
    笔上得来终觉浅,绝知此事要躬行 ......
  • 修改python jsonpickle源码, 实现不序列化对象私有成员(3)
    发现之前修改源码后,虽然过滤掉对象的私有成员,但是反序列化的时候,发现生成的对象只有只有公有成员,不包括私有成员.这不是我想要的,因为没有私有成员,对象就不完整了,并且有时候还需要一些私有成员的默认值.所以,还需要再优化一下.修改unpickler.py文件的def_restor......
  • JAVA中的访问修饰符
    private--同一类中可见;使用对象:变量,方法default(即默认,什么都不写)--在同一包中可见;使用对象:类,接口,变量,方法public--对所有类可见;使用对象:类,接口,变量,方法protected:对同一包内的类和所有子类可见;使用对象:变量,方法属性一般都是private方法一般都是publicUser类pa......
  • static关键字在C语言中的主要应用
    在C语言中, static 关键字有以下几种主要应用:1.修饰局部变量当 static关键字修饰一个局部变量时,这个变量就成为静态局部变量,通常一般局部变量存储在栈区,在函数执行结束后变量就会被销毁了。但被 static 修饰的局部变量存储在静态存储区,在函数调用结束时在程序的整个生命......
  • 成员方法
    成员方法(函数)用来表现对象行为申明在类语句块中,规则和函数申明规则相同成员方法不用加static关键字成员方法必须实例化对象,再通过对象来使用,相当于该对象执行了某个行为classPerson{publicstringname;publicintage;publicPersonfriendspublicvo......
  • 修改python jsonpickle源码, 实现不序列化对象私有成员(2)
    在前一篇文章中,通过修改源码来实现对象的私有成员不被序列化的功能.但是不够灵活,于是我又修改了一版,能够自定义过滤函数.实现起来不是很难,要点如下:#pickler.py的_flatten_obj_instance函数self._current_obj=obj#记录正在处理的对象returnself._flatten_dict......
  • 成员变量和访问修饰符
    成员变量申明在类语句块中用来描述对象的特征可以是任意变量类型数量不做限制是否赋值根据需求来定enumE_Gender{Male,Female,}structPosition{}classPerson//类中可以使用任何变量类型{//特征——成员变量//姓名stringname="robot"......
  • 支持数据撤销的模型成员推理攻击工具箱
    支持数据撤销的模型成员推理攻击工具箱本项目是一个支持数据撤销的成员推理攻击工具,支持mnist、cifar10、cifar100、cinic10等多种数据集,可实现针对LeNet、RNN、ResNet、RL等多种模型的成员推理攻击,并给用户一个详细的使用文档。环境Python3.9PyTorch>=1.10.0项目地址......