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修饰的成员属于 ...
随机推荐
- MCU命令
三D打印常用MCU命令 allocate_oids count=42 分配 42 个 OIDs,后续用于标识和管理不同的设备或组件 config_spi oid=0 pin=PD7 cs_active ...
- linux服务器下 conda 配置清华源
安装miniconda 下载安装脚本 wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Li ...
- 输出满足1+2+3+…+*n*<8888的最大整数
输出满足1+2+3+-+n<8888的最大整数 编写应用程序,输出满足1+2+3+-+n<8888的最大整数 输出格式:满足条件的最大整数:xxxxx public class Demo0 ...
- Solution Set -「OurOJ Contest #2587」浅写
\(\mathscr A\sim\)「OurOJ #47030」_ Link & Submission & Tags:「A.DP-计数 DP」「A.数学-Stirling 数/反演 ...
- 一致性hash和普通hash和hash槽
普通hash Hash函数:一般翻译做散列.杂凑,或音译为哈希,是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值.碰撞(冲突):如果两个关键字通过 ...
- react父传子(以及默认值)
子组件 import React, { Component } from "react"; import "./base.css" // 父组件 export ...
- oracle开启了审计功能,导致sysaux表空间满的问题
查询是否开启审计功能 SQL> show parameter audit 如下图所示: AUDIT_TRAIL参数用于指定数据库审计跟踪信息的记录方式.它接受三个可能的参数:NONE,DB,OS ...
- tomcat 自启动脚本(普通模式)
tomcat daemon模式启停脚本 https://www.cnblogs.com/wxp100/p/14846331.html tomcat 普通模式启停脚本 vi tomcatServer.s ...
- FLink17--聚合函数-AggWindowApp
一.依赖 二.代码 package net.xdclass.class11; import org.apache.flink.api.common.RuntimeExecutionMode; impo ...
- Luogu P3059 Concurrently Balanced Strings G 题解 [ 紫 ] [ 线性 dp ] [ 哈希 ] [ 括号序列 ]
模拟赛搬的题,dp 思路很明显,但难点就在于找到要转移的点在哪. 暴力 首先我们可以先考虑 \(k=1\) 的情况,这应该很好想,就是对于每一个右括号,找到其匹配的左括号,然后进行转移即可,这个过程可 ...