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

Java静态变量笔记

前言

    在Java中,静态变量使用关键字`static`修饰的类变量,所以静态变量与类变量指的是一回事

static String baby = "hello world";

综合知识点

1. 静态变量是独立于任何对象的,因此可以直接通过类名访问,例如`ClassName.staticVariable`,属于类,与对象无关,所以所有对象共享静态变量。

2. 静态变量在类被加载时初始化,它的生命周期与类相同,当类被卸载时静态变量也会被销毁。

3. 静态变量在内存中的位置是在方法区(Method Area)中,而不是在堆(Heap)中。

4. 静态变量通常用于表示类级别的属性或共享的常量,比如`Math.PI`就是一个常用的静态变量示例。

5. 静态变量可以被所有对象实例共享,因此当一个对象对静态变量进行修改时,其他对象访问的是同一个静态变量,所以也会受到影响。

6. 静态变量的值在整个程序运行期间保持不变,除非显式地进行修改。

什么时候用静态变量?

1. **常量**

如果一个变量的值在整个程序中都是固定不变的,可以使用静态变量来表示常量。
```java
public static final int MAX_COUNT = 100;
```

2. **所有对象共享数据**

如果某个数据是所有实例共享的,可使用静态变量
```java
public static int instanceCount = 0;
```

3. **工具类**:静态变量可以用在工具类中,保存工具类的状态或配置信息
```java
public static final String DEFAULT_ENCODING = "UTF-8";
```

4. **单例模式**:在单例模式中,静态变量用来保存单例对象的引用。
```java
private static Singleton instance;
```

注意事项

静态变量在内存中会一直存在直到程序结束,因此过度使用静态变量可能导致内存占用过高,甚至可能引起内存泄漏问题。因此,在使用静态变量时要慎重考虑其生命周期和作用域。比如你创建了1000个对象,都使用静态变量引用。。。。。。。

GPT给的建议

1. 静态变量称为类变量,它被所有类的实例所共享
2. 静态变量在类加载时被初始化,只会在类加载的时候初始化一次
3. 静态变量可以通过类名直接访问,无需创建类的实例,当然也能通过对象访问
4. 静态变量存储在方法区中,而不是在堆内存中(指虚拟机内存区域)
5. 静态变量使用全大写字母命名,方便的与实例变量区分
6. 静态变量值可在类的生命周期内被修改,不推荐频繁修改
7. 静态变量用于实现常量,例如 Math.PI 是一个常量静态变量
8. 静态变量用于共享数据,比如计数器或者共享的配置信息

总结

1、静态变量,可以用,但是不要滥用

2、当所有对象共享同一份数据,建议用静态变量,比如有个Person类,统计总人口

class Person {

    public static int TOTAL = 0;

}

3、静态变量占用的内存空间,随着类的生命周期在一起,这点尤其注意,滥用静态变量,会把你的内存撑爆了

http://www.xdnf.cn/news/410239.html

相关文章:

  • 告别数据僵尸!Redis实现自动清理过期键值对
  • Icepak水冷教程
  • mysql中索引的使用
  • 如何利用自然语言生成技术重塑内容生产范式?
  • 细说STM32单片机FreeRTOS事件组及其编程应用实例
  • C++核心编程解析:模板、容器与异常处理全指南
  • AIGC时代的内容安全:AI检测技术如何应对新型风险挑战?
  • 【八股消消乐】慢SQL优化手段总结
  • Claude深度解析:从技术原理到实战应用的全栈指南
  • 大模型剪枝技术介绍
  • Kotlin 懒初始化值
  • Android音频解码中的时钟同步问题:原理、挑战与解决方案
  • 基于SpringBoot3实现MyBatis-Plus两种条件构造器(QueryWrapper、UpdateWrapper)入门实战
  • AI工具分享篇|VDraw.ai免费生成长图
  • 第十部分:文件与动静态库
  • C# 基础 try-catch代码块
  • Hugging Face推出了一款免费AI代理工具,它能像人类一样使用电脑
  • 蓝桥杯13届国赛 2022
  • MySQL的sql_mode详解:从优雅草分发平台故障谈数据库模式配置-优雅草卓伊凡
  • 295. 数据流的中位数解题思路(通俗易懂大小堆解法)
  • PyTorch随机数控制全指南:从种子设置到状态管理
  • 【C++】”如虎添翼“:模板初阶
  • AI-Agent@spring ai概览
  • 动态IP技术赋能业务创新:解锁企业数字化转型新维度
  • 智表 ZCELL 插件快速入门指南(原创)
  • 【Redis】SDS结构
  • Redis的IO多路复用
  • 驾驭智能浪潮:AI SEO赋能的操作指南
  • Swift实战:如何优雅地从二叉搜索树中挑出最接近的K个值
  • C++ 中介者模式详解