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
static修饰成员变量的特点及static修饰成员变量内存图解-java se进阶 day01的更多相关文章
- 【Java SE】Day01 前言、入门程序、常量、变量
回顾一下Java之前学的内容 Day01 前言.入门程序.常量.变量 一.基础知识 莱布尼茨发明二进制,辗转相除与8421位权法互转,1B=1bit=1字节=8位=8byte dos cls清屏dir ...
- 为什么接口要规定成员变量必须是public static final的呢?(转)
在interface里面的变量默认都是public static final 的.所以可以直接省略修饰符: String param="ssm"://变量需要初始化 为什么接口要规 ...
- 1.2成员变量+类变量+static关键字
成员变量和类变量的区别 由static修饰的变量称为静态变量,其实质上就是一个全局变量.如果某个内容是被所有对象所共享,那么该内容就应该用静态修饰:没有被静态修饰的内容,其实是属于对象的特殊描述. 不 ...
- java static成员变量方法和非static成员变量方法的区别
这里的普通方法和成员变量是指,非静态方法和非静态成员变量首先static是静态的意思,是修饰符,可以被用来修饰变量或者方法. static成员变量有全局变量的作用 非static成员变量则 ...
- 带有public static void main方法的类,其中的成员变量必须是static的,否则main方法没法调用。除非是main里的局部变量。因为main方法就是static的啊。
带有public static void main方法的类,其中的成员变量必须是static的,否则main方法没法调用.除非是main里的局部变量.因为main方法就是static的啊.
- 【Java关键字-Interface】为什么Interface中的变量只能是 public static final
三个关键字在接口中的存在原因:public:接口可以被其他接口继承,也可以被类实现,类与接口.接口与接口可能会形成多层级关系,采用public可以满足变量的访问范围: static:如果变量不是sta ...
- Java SE之[静态成员/类成员]与[非静态成员/实例成员]【static】
定义 静态成员:又称类成员,使用static修饰符的方法和变量: 非静态成员:又称实例成员,未使用static修饰符的方法和变量. 结论 注:jdk1.8 测试源码 public class Main ...
- Java中的static修饰int值做全局变量与static修饰词初始化顺序
先看一道题 public class HasStatic{ private static int x=100; public static void main(String args[]){ HasS ...
- 静态成员变量和静态成员函数(static)
数据成员可以分静态变量.非静态变量两种. 静态成员:静态类中的成员加入static修饰符,即是静态成员.可以直接使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配 ...
- static介绍、内部类、final、权限修饰符的作用范围
static 关键字:(可用于修饰方法.变量) static 特点: static是静态修饰符,一般修饰成员变量.被static修饰的属于全局共享.被static修饰的成员属于 ...
随机推荐
- 变分推断(VI)、随机梯度变分推断(SGVI/SGVB)、变分自编码器(VAE)串讲
参考资料: VI参考:PRML Chapter 10. SGVI原文:Auto-Encoding Variational Bayes -- Kingma. VAE参考1:Tutorial on Var ...
- CDS标准视图:维护策略描述 I_MaintStrategyTextData
视图名称:维护策略描述 I_MaintStrategyTextData 视图类型:基础视图 视图代码: 点击查看代码 @EndUserText.label: 'Maintenance Strategy ...
- 2020年最新版区块链面试题2-copy
1. 问:你认为区块链技术中的区块意味着什么? 区块链由所有金融交易的信息组成.一个块只不过是一个记录列表.当这些列表相互结合时,它们被称为区块链.例如,一个组织有100个分类账簿,其中的组合被称为区 ...
- 如何快速的开发一个完整的iOS直播app(礼物篇)
搭建礼物列表 使用modal,设置modal样式为custom,就能做到从小往上显示礼物列表,并且能看见前面的直播界面 礼物模型设计 一开始创建3个礼物模型,保存到数组,传入给礼物View展示,本来礼 ...
- w3cschool-Netty 实战精髓篇2
https://www.w3cschool.cn/essential_netty_in_action/essential_netty_in_action-adkv28bm.html 研究Netty中的 ...
- uni-app之vuex(一)
如何获取到vuex中data的值 uni-app中内置了 vuex 所以可以直接去使用哈. 在项目的跟目录下 创建文件夹store 在store目录下创建index.js index.js目录如下 i ...
- 从找朋友到找变位词:一道趣味字符串问题的深入解析|LeetCode 438 找到字符串中所有字母异位词
LeetCode 438 找到字符串中所有字母异位词 点此看全部题解 LeetCode必刷100题:一份来自面试官的算法地图(题解持续更新中) 生活中的算法 还记得小时候玩的"找朋友&quo ...
- Nacos 从入门到精通-手把手教会你
Nacos 使用教程 Nacos 是阿里巴巴开源的动态服务发现.配置管理和服务管理平台,旨在帮助您更容易地构建.交付和管理微服务平台.它集成了服务注册与发现.动态配置管理.动态 DNS 服务和服务及元 ...
- 春节福利来啦!Mac用户快来抽大奖
亲爱的Mac俱乐部(MaClub)用户及所有果粉朋友们: 值此新春佳节之际,Mac俱乐部特别推出春节抽奖活动,以回馈广大用户长期以来的支持与厚爱.我们精心准备了丰富的奖品,希望能为您的新年增添一份惊喜 ...
- tomcat 自启动脚本(普通模式)
tomcat daemon模式启停脚本 https://www.cnblogs.com/wxp100/p/14846331.html tomcat 普通模式启停脚本 vi tomcatServer.s ...