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

java中的静态变量和实例变量的区别

java中的静态变量和实例变量的区别

在Java中,静态变量(也称为类变量)和实例变量是两种不同类型的变量,它们在多个方面存在显著的区别。以下是它们之间的一些主要区别:

存储位置

  • 静态变量:存储在方法区(在Java 8及之后版本,方法区被称为元空间)的静态区域中,被类的所有实例共享。即,无论创建多少个类的实例,静态变量只有一份拷贝。
  • 实例变量:存储在堆内存中,每个类的实例都有自己的一份拷贝。即,每当你创建一个类的实例时,都会为实例变量分配内存。

访问方式

  • 静态变量:可以通过类名直接访问(无需创建类的实例),也可以通过实例名访问。访问静态变量的一般语法是 类名.静态变量名 或 实例名.静态变量名
  • 实例变量:只能通过类的实例来访问。访问实例变量的一般语法是 实例名.实例变量名

生命周期

  • 静态变量:静态变量的生命周期贯穿整个应用程序。只要类被加载到JVM中,静态变量就存在,直到类被卸载。
  • 实例变量:实例变量的生命周期与对应的实例相同。实例变量在对象被创建时创建,在对象被销毁时销毁。

用途

  • 静态变量:通常用于描述类的属性,即所有对象共有的属性。例如,在表示学生类的场景中,学校的名称可能是一个静态变量,因为所有学生都属于同一所学校。
  • 实例变量:用于描述对象的特定属性,即每个对象可能拥有不同的属性值。例如,学生的姓名、年龄和分数都是实例变量,因为每个学生的这些属性都是不同的。

初始化

  • 静态变量:可以在声明时初始化,或者在静态代码块中初始化。静态变量在类被加载到JVM时初始化,且只初始化一次。
  • 实例变量:可以在声明时初始化,也可以在构造方法中初始化,或者在实例初始化块中初始化。每次创建类的实例时,实例变量都会被初始化。

内存分配

  • 静态变量和实例变量在内存中的分配区域不同,如上所述,静态变量存储在方法区的静态区域,而实例变量存储在堆内存中。

代码演示说明

        以上从概念上说明了两者之前的区别,下面举一个简单的例子例证下,有个更直观的感受。

class VariantTest{public static int staticVar = 0;public int instanceVar = 0;public VariantTest(){staticVar++;instanceVar++;System.out.println("staticVar=" + staticVar + ",instanceVar=" + instanceVar);}
}@Test
public void test3(){VariantTest variantTest = new VariantTest();VariantTest variantTest2 = new VariantTest();VariantTest variantTest3 = new VariantTest();
}

如上是一个类中有一个静态变量staticVar和一个实例变量instanceVar,构造方法中分别对这两个变量+1,我们先看结果

staticVar=1,instanceVar=1
staticVar=2,instanceVar=1
staticVar=3,instanceVar=1

从结果可以一目了然的看出,静态变量其实每次创建新的对象都没变,始终是同一个进行加1操作,所以结果一直累加,而实例变量则是每次创建新的对象时重新创建,所以每次都是1。由此可以看出静态变量在类被加载到JVM时初始化,且只初始化一次。实例变量每次创建类的实例时,实例变量都会被初始化。

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

相关文章:

  • 【Effecutive C++】条款02 尽量以const, enum, inline替换 #define
  • leetcode-226. 翻转二叉树
  • 用的到linux-tomcat端口占用排查-Day5
  • mqtt协议详解(0)初步认识mqtt
  • Java语言程序设计基础篇_编程练习题*16.7 (设置时钟的时间)
  • YOLOv8新版本支持实时检测Transformer(RT-DETR)、SAM分割一切
  • 【传输层协议】UDP和TCP协议
  • Java Excel复杂表头,表头合并单元格
  • Java整合腾讯云发送短信实战Demo
  • 电路中电阻,电容和电感作用总结
  • OrangePi AIpro学习1 —— 烧写和ssh系统
  • Gather 全球化进程迅速 多重利好推动未来发展
  • 面试经典 222. 完全二叉树的节点个数
  • 【css】3d柱状图-vue组件版
  • 《计算机组成原理》(第3版)第3章 系统总线 复习笔记
  • 【网络安全】https协议的加密方案避免中间人攻击(MITM攻击)导致的数据泄露风险
  • 拼多多商家电话采集 拼多多店铺爬虫软件使用教程
  • RK3566 MIPI屏调试记录
  • 爬虫数据模拟真实设备请求头User-Agent生成(fake_useragent:一个超强的Python库)
  • 【教育宝-注册安全分析报告】
  • 3.达梦数据库基础运维管理
  • 【Linux】【系统纪元】Linux起源与环境安装
  • Android笔试面试题AI答之Activity(9)
  • 什么是嵌入式
  • SAM 2:Segment Anything in Images and Videos 论文详解
  • PYTHON专题-(10)基操之我要玩并发
  • 双指针实现删除字符串中的所有相邻重复项
  • vue(vue2和vue3)项目打包去除console.log
  • Visual Studio 2022社区版、专业版、企业版功能对比表
  • Codeforces 888 div3 A-G