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的更多相关文章

  1. 【Java SE】Day01 前言、入门程序、常量、变量

    回顾一下Java之前学的内容 Day01 前言.入门程序.常量.变量 一.基础知识 莱布尼茨发明二进制,辗转相除与8421位权法互转,1B=1bit=1字节=8位=8byte dos cls清屏dir ...

  2. 为什么接口要规定成员变量必须是public static final的呢?(转)

    在interface里面的变量默认都是public static final 的.所以可以直接省略修饰符: String param="ssm"://变量需要初始化 为什么接口要规 ...

  3. 1.2成员变量+类变量+static关键字

    成员变量和类变量的区别 由static修饰的变量称为静态变量,其实质上就是一个全局变量.如果某个内容是被所有对象所共享,那么该内容就应该用静态修饰:没有被静态修饰的内容,其实是属于对象的特殊描述. 不 ...

  4. java static成员变量方法和非static成员变量方法的区别

    这里的普通方法和成员变量是指,非静态方法和非静态成员变量首先static是静态的意思,是修饰符,可以被用来修饰变量或者方法. static成员变量有全局变量的作用       非static成员变量则 ...

  5. 带有public static void main方法的类,其中的成员变量必须是static的,否则main方法没法调用。除非是main里的局部变量。因为main方法就是static的啊。

    带有public static void main方法的类,其中的成员变量必须是static的,否则main方法没法调用.除非是main里的局部变量.因为main方法就是static的啊.

  6. 【Java关键字-Interface】为什么Interface中的变量只能是 public static final

    三个关键字在接口中的存在原因:public:接口可以被其他接口继承,也可以被类实现,类与接口.接口与接口可能会形成多层级关系,采用public可以满足变量的访问范围: static:如果变量不是sta ...

  7. Java SE之[静态成员/类成员]与[非静态成员/实例成员]【static】

    定义 静态成员:又称类成员,使用static修饰符的方法和变量: 非静态成员:又称实例成员,未使用static修饰符的方法和变量. 结论 注:jdk1.8 测试源码 public class Main ...

  8. Java中的static修饰int值做全局变量与static修饰词初始化顺序

    先看一道题 public class HasStatic{ private static int x=100; public static void main(String args[]){ HasS ...

  9. 静态成员变量和静态成员函数(static)

    数据成员可以分静态变量.非静态变量两种. 静态成员:静态类中的成员加入static修饰符,即是静态成员.可以直接使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配 ...

  10. static介绍、内部类、final、权限修饰符的作用范围

    static 关键字:(可用于修饰方法.变量)     static 特点:         static是静态修饰符,一般修饰成员变量.被static修饰的属于全局共享.被static修饰的成员属于 ...

随机推荐

  1. MCU命令

    三D打印常用MCU命令 allocate_oids count=42 分配 42 个 OIDs,后续用于标识和管理不同的设备或组件 config_spi oid=0 pin=PD7 cs_active ...

  2. linux服务器下 conda 配置清华源

    安装miniconda 下载安装脚本 wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Li ...

  3. 输出满足1+2+3+…+*n*<8888的最大整数

    输出满足1+2+3+-+n<8888的最大整数 编写应用程序,输出满足1+2+3+-+n<8888的最大整数 输出格式:满足条件的最大整数:xxxxx public class Demo0 ...

  4. Solution Set -「OurOJ Contest #2587」浅写

    \(\mathscr A\sim\)「OurOJ #47030」_   Link & Submission & Tags:「A.DP-计数 DP」「A.数学-Stirling 数/反演 ...

  5. 一致性hash和普通hash和hash槽

    普通hash Hash函数:一般翻译做散列.杂凑,或音译为哈希,是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值.碰撞(冲突):如果两个关键字通过 ...

  6. react父传子(以及默认值)

    子组件 import React, { Component } from "react"; import "./base.css" // 父组件 export ...

  7. oracle开启了审计功能,导致sysaux表空间满的问题

    查询是否开启审计功能 SQL> show parameter audit 如下图所示: AUDIT_TRAIL参数用于指定数据库审计跟踪信息的记录方式.它接受三个可能的参数:NONE,DB,OS ...

  8. tomcat 自启动脚本(普通模式)

    tomcat daemon模式启停脚本 https://www.cnblogs.com/wxp100/p/14846331.html tomcat 普通模式启停脚本 vi tomcatServer.s ...

  9. FLink17--聚合函数-AggWindowApp

    一.依赖 二.代码 package net.xdclass.class11; import org.apache.flink.api.common.RuntimeExecutionMode; impo ...

  10. Luogu P3059 Concurrently Balanced Strings G 题解 [ 紫 ] [ 线性 dp ] [ 哈希 ] [ 括号序列 ]

    模拟赛搬的题,dp 思路很明显,但难点就在于找到要转移的点在哪. 暴力 首先我们可以先考虑 \(k=1\) 的情况,这应该很好想,就是对于每一个右括号,找到其匹配的左括号,然后进行转移即可,这个过程可 ...