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

每日一题----------类变量

 由问题引出解决方案

 按照传统思想:

 创建调用方法的主类

//创建一个计数器 来记录小孩的个数
        int count = 0 ;
        game child1 = new game("张三");
        child1.Game();
        count++;
        game child2 = new game("李四");
        child2.Game();
        count++;
        game child3 = new game("王五");
        child3.Game();
        count++;
        System.out.println("总共" + count + "个小孩在玩耍");

创建一个实体化的类,并且创建方法,来表示小孩玩耍的信息

class game{
    //给小孩带一个姓名属性
    private String name;
    //传入小孩的姓名
    public game(String name) {
        this.name = name;
    }
    //打印小孩玩耍的信息
    public void Game(){
        System.out.println(name + "正在玩耍、、、、");
    }

改进,将count设置为类变量(静态变量)

public static int count = 0;

在调用的时候,就是可以任意一个对象调用,然后累加

child1.count++;
child2.count++;
child3.count++;

关于静态类的内存分析图------------------------------------------------------------------------------------------- 

 

 

静态变量的内存分配

  1. 存储区域:静态变量存储在方法区(Method Area)中。方法区是JVM运行时数据区的一部分,主要用于存储已被虚拟机加载的类信息、常量、静态变量等。需要注意的是,从Java 7开始,运行时常量池被移到了堆(Heap)中;而在Java 8及之后版本,永久代(PermGen)被元空间(Metaspace)取代,方法区的概念实际上由元空间实现。

  2. 生命周期:静态变量的生命周期与类的生命周期相同,即从类加载到JVM卸载该类为止。一旦类被加载到JVM中,静态变量就会被初始化,并且在整个程序执行期间都存在,除非显式地将其值设为null或重新赋值。

  3. 初始化时机:静态变量在类第一次被加载时初始化,这通常发生在首次创建该类的对象或首次访问静态成员(包括静态方法和静态变量)的时候。静态变量只能通过类名来引用,不能通过类的实例引用。

  4. 共享性:因为静态变量不属于任何一个具体的对象实例,而是属于整个类,所以它们可以被该类的所有实例共享。对静态变量所做的任何改变都会影响到所有使用该变量的地方。

注意事项

        1.  线程安全:如果多个线程同时访问和修改静态变量,则可能会出现并发问题。在这种情况下,需要考虑同步机制以确保线程安全。

        2.垃圾回收:静态变量不会随着类实例的销毁而被回收。只有当类本身被卸载时,其对应的静态变量才会被清除。因此,在使用静态变量时应小心管理资源,避免内存泄漏。

 

总结:

 创建一个静态变量字符串name的名字为张三

class A {
public static String name = "张三";
}

然后创建主类,去访问,可以用类名直接访问

//可以自己类名访问
A.name ;
//也可以用创建对象来访问
A p1 = new A();
p1.name;

 要注意访问修饰符,如果是私有的private也要遵循访问权限,否则会报错。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dtcms.com/a/45056.html

相关文章:

  • 靶场之路-Kioptix Level-5
  • path 路径模块
  • 【Java】Stream API
  • 数据集笔记:新加坡LTA MRT 车站出口、路灯 等位置数据集
  • 开源绝版经典小游戏合集
  • 第三十四:6.4.【v-model】
  • Kali换源
  • 【Linux高级IO】多路转接(poll epoll)
  • 第49天:Web开发-JavaEE应用SpringBoot栈模版注入ThymeleafFreemarkerVelocity
  • Oracle 认证为有哪几个技术方向
  • python中如何组织项目工程文件
  • 一文学会Volatile关键字
  • DeepSeek 开源周:第六天的“One More Thing” – DeepSeek-V3/R1 推理系统的概述
  • 【Web Cache Deception简介】
  • 将QT移植到RK3568开发板
  • HarmonyOS学习第11天:布局秘籍RelativeLayout进阶之路
  • 旁路挂载实验
  • JavaScript 数据类型和数据结构:从基础到实践
  • ASPNET Core笔试题 【面试宝典】
  • ubuntu 20.04 安装labelmg
  • MyBatis-Plus 分页查询(PageHelper)
  • Debian系统查看OS Loader、内核和init/systemd相关信息
  • 常见的非关系性数据库
  • 欧氏距离、曼哈顿距离、切比雪夫距离、闵可夫斯基距离、马氏距离理解学习
  • c++ 画数学函数图
  • 序列化选型:字节流抑或字符串
  • 医疗AR眼镜:FPC如何赋能科技医疗的未来之眼?【新立电子】
  • 深入理解Java网络编程:从基础到高级应用
  • Github-介绍
  • 【软路由】ImmortalWrt 编译指南:从入门到精通