当前位置: 首页 > news >正文

Java类变量(静态变量)

一、类变量(static)静态变量

  • 什么是类变量

    类变量也叫 静态变量/静态属性 ,是该类的所有对象共享的变量,任何一个该类的对象访问它时,取到的都是相同的值,同样任何一个该类的对象去修改它时,修改的也是同一个变量。

  • 如何定义类变量

    访问修饰符 static 数据类型 变量名;【推荐】
    static 访问修饰符 数据类型 变量名;【不推荐】
  • 如何访问类变量

    类名.类变量名
    或者 对象名.类变量名 【静态变量的访问修饰符的访问权限和范围 和 普通属性时一样的】
    推荐:类名.类变量名;
  • 代码样例:

    • package com.rain.house.text;
      ​
      public class text02 {public static void main(String[] args) {//说明:类变量是随类的加载创建的,所以即使没有创建对象示例也可以访问。System.out.println(A.name);}
      }
      ​
      ​
      class A{//类变量public static String name = "sys";
      ​public void print(){System.out.println(name);}
      }

  • 案例分析:

package com.rain.house.text;
​
public class text01 {public static void main(String[] args) {Child child1 = new Child("jack");child1.join();child1.count++;Child child2 = new Child("xiaomi");child2.join();child2.count++;Child child3 = new Child("aming");child3.join();child3.count++;
​System.out.println("一共有" + Child.count + "个小朋友");}
}
​
​
class Child{private String name;//定义一个变量count,是应静态变量//该变量最大的特点就是会被Child 类的所有的对象实例共享public static int count = 0;public Child(String name) {this.name = name;}public void join() {System.out.println(this.name + "加入了游戏、、、、、、");}
}

如上述案例当我们想要计算小孩个数的时候,如果我们只是在主函数去做一个count++去记录人数,有点不符合oop的编程形式,所以我们需要想办法在类对象里面去进行一个count++操作进行人数的计算,所以引出了类变量


  • 类变量是存在于哪里呢?

如图:

类变量的位置随着jdk版本的不同,所存在的内存空间的地方也就不同。

但是不变的是:

  1. static变量是同一个类所有对象共享的

  2. static类变量,在加载类的时候就生成了


1.1、类变量使用注意事项和细节

  1. 什么时候需要使用类变量?

    当我们需要让某个类的所有对象都共享一个变量时,就可以考虑使用类变量(静态变量)。比如上面的案例,计算孩子数量。再比如:定义学生类,统计所有学生共交多少钱。Student(name,static fee)

  2. 类变量与实例变量(普通变量)区别?

    类变量是该类的所有对象共享的,而实例变量是每个对象独享的,如上面图片的0x110 和 0x22空间里面的属性。

  3. 加上staitc成为类变量 或者 静态变量, 否则称为 实例变量/普通变量/非静态变量

  4. 类变量可以通过 类名.类变量名 或者 对象名.类变量名 来访问,但java设计者推荐我们使用 类名.类变量名方式访问。

    【前提是 满足访问修饰符的访问权限和范围】

  5. 实例变量不能通过 类名.类变量名 方式访问

  6. 类变量是在类加载时,就初始化了,也就是说,即使你没有创建对象,只要类加载了,就可以使用类变量了。

  7. 类变量的生命周期随着类的加载开始,随着类消亡而销毁


以上仅作为学习记录笔记~~~~  无其他用处

http://www.lryc.cn/news/581407.html

相关文章:

  • 【论文】微服务架构下分布式事务一致性解决方案设计与实践
  • 《数据维度的视觉重构:打造交互式高维数据可视化的黄金法则》
  • Java教程——深入学习guava之并发编程
  • 如何使用backtrace定位Linux程序的崩溃位置
  • Python练习Day1
  • 【C语言刷题】第十一天:加量加餐继续,代码题训练,融会贯通IO模式
  • 双倍硬件=双倍性能?TDengine线性扩展能力深度实测验证!
  • 类(JavaBean类)和对象
  • BM6 判断链表中是否有环(牛客)
  • Linux安装java后没法运行
  • 西门子PLC博图软件学习(一)
  • 手写 Vue 中虚拟 DOM 到真实 DOM 的完整过程
  • .NET9 实现排序算法(MergeSortTest 和 QuickSortTest)性能测试
  • LinkedList 链表数据结构实现 (OPENPPP2)
  • 前端面试专栏-算法篇:18. 查找算法(二分查找、哈希查找)
  • AI智能体革命:从对话机器到自主决策的进化之路 **——当AI长出“手和脑”,一场人机协作范式转移正在发生
  • AI小智项目全解析:软硬件架构与开发环境配置
  • 图灵完备之路(数电学习三分钟)----解码器
  • Pytest 测试发现机制详解:自动识别测试函数与模块
  • 理想汽车6月交付36279辆 第二季度共交付111074辆
  • 比较两个csv文件的内容是否一致
  • Python 机器学习核心入门与实战进阶 Day 3 - 决策树 随机森林模型实战
  • HTML初学者第三天
  • centos 7.6安装mysql8
  • 基于大模型的肾积水全周期预测与诊疗方案研究报告
  • 03每日简报20250705
  • Qt开发:QListWidget的介绍和使用
  • java整合itext pdf实现自定义PDF文件格式导出
  • 画笔的进化:生成式AI与艺术创造力的范式革命
  • 完成ssl不安全警告