【JAVA】JAVA中的静态变量、全局变量

【JAVA】JAVA中的静态变量、全局变量

    • 一、静态变量
      • 1.1、静态变量的特点和使用方法
      • 1.2、静态变量的使用场景
      • 1.3、简单的示例,
      • 1.4、静态变量作用范围
    • 二、全局变量
      • 2.1、静态变量(Static Variables):
      • 2.2、单例模式中的静态变量

一、静态变量

在Java中,静态变量是指用关键字 static 声明的变量,它属于类级别的变量而不是对象级别的变量。因此,无论创建多少个类的实例对象,静态变量只会被初始化一次,并且在整个应用程序的生命周期内都存在于内存中,可以通过类名直接访问和修改。

1.1、静态变量的特点和使用方法

  • 类级别的变量:静态变量属于类级别,而不是对象级别。即使没有创建类的实例对象,也可以通过类名直接访问和修改静态变量。
  • 一次初始化:静态变量在类加载时被初始化,并且只会被初始化一次。当类加载器加载类时,静态变量就会被分配内存空间并赋初值。
  • 全局可访问:静态变量可以在整个应用程序的任何地方访问和修改,因此它们通常被用来实现全局数据或者共享数据(这个还是要看修饰符的,通常情况下是可以作为全局变量使用)。
  • 共享数据:静态变量是多个对象共享的数据,所有实例对象都可以访问和修改静态变量,修改的值对所有对象都是可见的。
  • 命名规范:通常静态变量的命名习惯是使用大写字母和下划线分隔的方式,例如MAX_COUNT。

1.2、静态变量的使用场景

  • 存储常量值或者全局配置信息,例如定义常量PI、MAX_SIZE等。
  • 实现单例模式中的全局唯一实例对象引用。
  • 实现工具类中的共享数据或者静态方法。
  • 记录全局状态或者计数器等。

1.3、简单的示例,

展示了Java中静态变量的定义和使用方式:

public class StaticVariableExample {public static int totalCount = 0; // 静态变量public StaticVariableExample() {totalCount++; // 每次创建对象时,增加计数器}public static void main(String[] args) {StaticVariableExample obj1 = new StaticVariableExample();StaticVariableExample obj2 = new StaticVariableExample();StaticVariableExample obj3 = new StaticVariableExample();System.out.println("总计数:" + StaticVariableExample.totalCount); // 输出:总计数:3}
}

在上面的示例中,静态变量 totalCount 被用来统计创建的对象个数,在每次创建对象时增加计数器的值。通过类名直接访问静态变量可以获取到全局的计数器值。

1.4、静态变量作用范围

静态变量在Java中通常被称为类级别的变量,而不是对象级别的变量。 虽然静态变量可以被整个类的实例对象共享,但并不意味着它一定是全局的,它的作用范围是有限的,主要取决于其定义的位置和可访问性。

静态变量的作用范围主要包括以下几个方面:

  • 类内部:静态变量可以在类的任何方法、构造方法、静态代码块等地方直接访问和修改,属于类的内部作用范围。
  • 同一个包内其他类:如果静态变量的访问修饰符是public或者protected,则其他处于同一个包内的类也可以访问该静态变量。
  • 其他包内的类:如果静态变量的访问修饰符是public,则其他包内的类也可以访问该静态变量。但是,如果静态变量的访问修饰符是protected、private或者默认(即没有显式指定访问修饰符),则其他包内的类无法访问该静态变量。
  • 跨类加载器:在某些特殊情况下,比如涉及到不同的类加载器加载的类,静态变量的作用范围可能会更加复杂,可能会有多份静态变量实例存在。详情参考【JAVA】类加载过程,以及类加载器

因此,静态变量的作用范围是可以限定的,取决于其访问修饰符和所在的包结构。在实际开发中,要根据需求合理定义静态变量的访问修饰符,以确保数据的安全性和封装性。

二、全局变量

在Java中,全局变量通常指的是静态变量或者单例模式中的静态变量,它们属于类级别的变量,在整个应用程序的生命周期内都存在于内存中,并且可以被该类的所有实例对象共享。

这些变量在类加载时被初始化,属于类本身而不是类的实例。全局变量在Java中指的是整个应用程序范围内可访问的变量,通常是通过静态变量或者单例模式来实现的。

全局变量的作用范围比较广,可以在任何地方访问和修改,因此在使用全局变量时要考虑其线程安全性和内存占用问题。

2.1、静态变量(Static Variables):

静态变量属于类,而不是类的实例。它们在类加载时被初始化,并且只会被初始化一次。静态变量可以通过类名直接访问,无需创建类的实例。静态变量通常用于表示类级别的共享数据,例如常量、计数器、配置信息等。

public class MyClass {public static int count = 0; // 静态变量public static void main(String[] args) {MyClass.count++; // 访问静态变量System.out.println("Count: " + MyClass.count);}
}

2.2、单例模式中的静态变量

在单例模式中,静态变量常常用于实现单例对象的唯一实例。单例模式是一种设计模式,它确保一个类只有一个实例,并提供一个全局访问点来访问这个实例。

通常情况下,单例模式中的静态变量是私有的,并且通过静态方法来获取该实例。这样可以确保单例对象的唯一性和全局访问性。

以下是一个简单的单例模式示例,展示了静态变量在单例模式中的应用:

public class Singleton {// 私有静态变量,用于保存单例实例private static Singleton instance;// 私有构造方法,防止外部实例化private Singleton() {// 初始化单例对象}// 公有静态方法,用于获取单例实例public static Singleton getInstance() {if (instance == null) {instance = new Singleton(); // 懒汉式单例模式}return instance;}// 其他方法和属性
}

在这个示例中,instance 是一个私有静态变量,用于保存 Singleton类的唯一实例。getInstance 方法是一个公有静态方法,用于获取单例实例。在第一次调用 getInstance 方法时,会创建一个新的实例并将其赋值给 instance 变量,之后再次调用getInstance方法时就会直接返回已经创建的实例。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Pytorch】1.读取训练数据集

导入Dataset类 from torch.utils.data import Dataset # 注意是Dataset(大写)的才是类通过jupyter我们可以阅读一下Dataset类的具体使用方法 help(Dataset) # 或者直接 Dataset??我们可以看到具体对Dataset类的解释 从蓝色字体我们可以得出 所有的代…

QT QUICK 2 : QML与后端C++组建类MVVM结构工程最小化实现

一、采用QT对方法提供的宏进行结构MVVM的构建 1.打开QT &#xff0c;并创建QT-QUICK 工程&#xff0c;建议QT5.15及以上 2.准备 类 MyObject 其实这个类就可以作为VM使用 myobject.h #ifndef MYOBJECT_H #define MYOBJECT_H#include <QObject>class MyObject : publi…

释放创造力,低成本实现您的梦想应用 —— 尽在我们的开源低代码平台!

在数字化时代&#xff0c;每个企业都渴望拥有自己的专属应用&#xff0c;但传统开发模式的高成本和技术壁垒让许多梦想搁浅。现在&#xff0c;我们为您带来了革命性的解决方案 —— 一个开源、免费、且功能强大的低代码开发平台&#xff01; 为什么选择我们的低代码平台&#…

任务修复实例(9)

Quest Name Breaking the Chain | 斩断链条 Quest ID 25167 -- Delete Creature Spawned DELETE FROM world.creature WHERE id IN (39251,39245,39249); -- Adjust Creature States UPDATE world.creature_template SET npcflag 16777216, AIName SmartAI WHERE entry …

在线教育系统怎么运营,教育机构转化模型分析

做增长的都会明白&#xff0c;付费用户的增长才是关键&#xff0c;而且还是规模化的增长&#xff0c;毕竟拉新只是第一步&#xff0c;最重要的一步还在于如何转化。况且&#xff0c;很多人会选择尝试付费推广&#xff0c;这部分渠道用户要怎么引导购买产品&#xff0c;才能抵消…

QGraphicsView实现简易地图12『平移与偏移』

前文链接&#xff1a;QGraphicsView实现简易地图11『指定层级-定位坐标』 提供地图平移与偏移功能。地图平移是指将地图的中心点更改为给定的点&#xff0c;即移动地图到指定位置。地图偏移是指将当前视口内的地图向上/下/左/右/进行微调&#xff0c;这里偏移视口宽/高的四分之…

【C++】GNU Debugger (GDB) 使用示例

文章目录 GDB 使用示例GDB的常用命令示例 GDB 使用示例 GDB的常用命令 GDB&#xff08;GNU Debugger&#xff09;是一种Unix下的程序调试工具&#xff0c;用于调试C、C等编程语言编写的程序。以下是一些GDB的常用命令&#xff1a; 启动和退出&#xff1a; run 或 r&#xf…

【ArcGIS 脚本工具】格式化简单渲染图层或图层组

CAD加GIS是规划人的黄金搭档&#xff0c;不可偏废。 小编通常直接在ArcPro中加载CAD查看&#xff0c;这样可以保证CAD修改之后GIS能同步更新显示。 但是CAD在ArcPro中的显示多少有点水土不服。 比如湘源地块在ArcPro3.0中显示时会自动加上透明度&#xff0c;虽然这样可以看到…

汇集全球顶级AI的自助平台

1、介绍:此平台以其开放和便捷的特性,为用户提供了一个无需月费的 AI 服务入口。咱可以根据自己的需求,灵活选择和付费使用平台上的 AI 技术。 该平台强调的核心优势在于 “零门槛” 和 “按需付费”,意味着用户不需要进行大额预付或者承担长期的固定费用,而是可以根据实际…

利用爬虫解决数据采集难题

文章目录 安装为什么选择 BeautifulSoup 和 requests&#xff1f;安装 BeautifulSoup 和 requests解决安装问题 示例总结 在现代信息时代&#xff0c;数据是企业决策和发展的关键。然而&#xff0c;许多有用的数据分散在网络上&#xff0c;且以各种格式和结构存在&#xff0c;因…

设计模式学习(八)——《大话设计模式》

设计模式学习&#xff08;八&#xff09;——《大话设计模式》 单一职责原则 单一职责原则&#xff08;Single Responsibility Principle, SRP&#xff09;是软件开发中 SOLID 原则之一&#xff0c;由罗伯特C马丁&#xff08;Robert C. Martin&#xff09;提出。它指的是一个类…

Could not find the Qt platform plugin “dxcb“ in ““、 重点:是dxcb

这个重点就在于是dxcb不是xcb&#xff0c;让我一顿好找。 https://bugs.launchpad.net/ubuntu/source/deepin-qt5dxcb-plugin/bug/1826629 这篇文章描述了应该是deepin系统的一个问题&#xff0c;应该已经修复了不知道为什么我还会遇到。 不过知道是dxcb后直接去qtcreater里的系…

ROS 2边学边练(45)-- 构建一个能动的机器人模型

前言 在上篇中我们搭建了一个机器人模型(其由各个关节&#xff08;joint&#xff09;和连杆&#xff08;link&#xff09;组成)&#xff0c;此篇我们会通过设置关节类型来实现机器人的活动。 在ROS中&#xff0c;关节一般有无限旋转&#xff08;continuous&#xff09;,有限旋转…

Android 注解

自定义注解 注解原理 注解本质是一个接口&#xff0c;Java中所有注解都是继承了Annotation接口的 注解(…)&#xff1a;其实就是一个实现类对象&#xff0c;实现了该注解以及Annotation接口。

TB交易开拓者旗舰版自动交易的设置

本文针对TB交易开拓者旗舰版V6.0.7.0(期货程序化交易软件下载 - 交易开拓者),目前网上没有自动交易设置的完整教程&#xff0c;特写此篇。 1. 设置期货账户的自动登录和登出。点击菜单“文件/系统设置”&#xff0c;然后在“安全”tab做如下设置&#xff1a; 2 设置你的期货账…

C++向函数传递对象

C语言中&#xff0c;对象作为函数的参数和返回值的传递方式有 3 种&#xff1a;值传递、指针传递和引用传递。 1. 对象作为函数参数 把实参对象的值复制给形参对象&#xff0c;这种传递是单向的&#xff0c;只从实参到形参。因此&#xff0c;函数对形参值做的改变不会影响到实…

Sybase数据库分页查询(指定起始位置)

针对单表数据量过大的场景&#xff0c;分页查询必不可少。针对sybase数据库分页查询的案例全网稀少&#xff0c;特别是指定起始页的分页查询实现。 本文依靠实际开发场景&#xff0c;特此总结Sybase数据库分页查询&#xff08;指定起始位置&#xff09;。 目录 一、 SQL实现分…

视频号小店不直播怎么出单?这里面的秘密,一篇文章全曝光!

大家好&#xff0c;我是电商糖果 这两年关于视频号搞电商的话题度非常高&#xff0c;也吸引了很多商家入驻。 视频号因为背后巨大的私域流量池扶持&#xff0c;所以它的转化率非常高。 根据官方发出来的战报&#xff0c;我们也可以看出它的数据是翻倍增长。 在2024微信公开…

git对远程和本地分支进行重命名

要同时对Git的远程和本地分支进行重命名&#xff0c;你需要分几个步骤操作&#xff1a; 重命名本地分支 切换到其他分支&#xff1a;在重命名当前分支之前&#xff0c;确保你不在你想要重命名的那个分支上。你可以通过以下命令切换到另一个分支&#xff08;比如切换到master分…

5.06号模拟前端面试8问

5.06号模拟前端面试8问 1.promise如何实现then处理 在JavaScript中&#xff0c;Promise 是一个代表异步操作最终完成或失败的对象。它有三种状态&#xff1a;pending&#xff08;等待&#xff09;&#xff0c;fulfilled&#xff08;完成&#xff09;&#xff0c;rejected&…