Java 关键字static详解及实例代码
发布时间 - 2026-01-11 00:49:45 点击率:次一、 static代表着什么

在Java中并不存在全局变量的概念,但是我们可以通过static来实现一个“伪全局”的概念,在Java中static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,当然也可以修饰代码块。
Java把内存分为栈内存和堆内存,其中栈内存用来存放一些基本类型的变量、数组和对象的引用,堆内存主要存放一些对象。在JVM加载一个类的时候,若该类存在static修饰的成员变量和成员方法,则会为这些成员变量和成员方法在固定的位置开辟一个固定大小的内存区域,有了这些“固定”的特性,那么JVM就可以非常方便地访问他们。同时如果静态的成员变量和成员方法不出作用域的话,它们的句柄都会保持不变。同时static所蕴含“静态”的概念表示着它是不可恢复的,即在那个地方,你修改了,他是不会变回原样的,你清理了,他就不会回来了。
同时被static修饰的成员变量和成员方法是独立于该类的,它不依赖于某个特定的实例变量,也就是说它被该类的所有实例共享。所有实例的引用都指向同一个地方,任何一个实例对其的修改都会导致其他实例的变化。
public class User {
private static int userNumber = 0 ;
public User(){
userNumber ++;
}
public static void main(String[] args) {
User user1 = new User();
User user2 = new User();
System.out.println("user1 userNumber:" + User.userNumber);
System.out.println("user2 userNumber:" + User.userNumber);
}
}
------------
Output:
user1 userNumber:2
user2 userNumber:2
二、 怎么使用static
static可以用于修饰成员变量和成员方法,我们将其称之为静态变量和静态方法,直接通过类名来进行访问。
ClassName.propertyName
ClassName.methodName(……)
Static修饰的代码块表示静态代码块,当JVM装载类的时候,就会执行这块代码,其用处非常大。(对于代码块的使用这几天介绍,敬请关注)
2.1、static变量
static修饰的变量我们称之为静态变量,没有用static修饰的变量称之为实例变量,他们两者的区别是:
静态变量是随着类加载时被完成初始化的,它在内存中仅有一个,且JVM也只会为它分配一次内存,同时类所有的实例都共享静态变量,可以直接通过类名来访问它。
但是实例变量则不同,它是伴随着实例的,每创建一个实例就会产生一个实例变量,它与该实例同生共死。
所以我们一般在这两种情况下使用静态变量:对象之间共享数据、访问方便。
2.2、static方法
static修饰的方法我们称之为静态方法,我们通过类名对其进行直接调用。由于他在类加载的时候就存在了,它不依赖于任何实例,所以static方法必须实现,也就是说他不能是抽象方法abstract。
Static方法是类中的一种特殊方法,我们只有在真正需要他们的时候才会将方法声明为static。如Math类的所有方法都是静态static的。
2.3、static代码块
被static修饰的代码块,我们称之为静态代码块,静态代码块会随着类的加载一块执行,而且他可以随意放,可以存在于该了的任何地方。
三、 Static的局限
Static确实是存在诸多的作用,但是它也存在一些缺陷。
1、它只能调用static变量。
2、它只能调用static方法。
3、不能以任何形式引用this、super。
4、static变量在定义时必须要进行初始化,且初始化时间要早于非静态变量。
总结:无论是变量,方法,还是代码块,只要用static修饰,就是在类被加载时就已经"准备好了",也就是可以被使用或者已经被执行,都可以脱离对象而执行。反之,如果没有static,则必须要依赖于对象实例。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册
如何用狗爹虚拟主机快速搭建网站?
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
Java垃圾回收器的方法和原理总结
如何在建站主机中优化服务器配置?
EditPlus 正则表达式 实战(3)
Laravel如何升级到最新版本?(升级指南和步骤)
如何用PHP快速搭建CMS系统?
Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】
javascript基于原型链的继承及call和apply函数用法分析
zabbix利用python脚本发送报警邮件的方法
再谈Python中的字符串与字符编码(推荐)
JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)
Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧
零基础网站服务器架设实战:轻量应用与域名解析配置指南
Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录
高防服务器租用如何选择配置与防御等级?
php 三元运算符实例详细介绍
微信小程序 scroll-view组件实现列表页实例代码
🚀拖拽式CMS建站能否实现高效与个性化并存?
中山网站制作网页,中山新生登记系统登记流程?
Bootstrap整体框架之JavaScript插件架构
简单实现Android验证码
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
如何用西部建站助手快速创建专业网站?
网站制作价目表怎么做,珍爱网婚介费用多少?
JavaScript中的标签模板是什么_它如何扩展字符串功能
如何在Windows环境下新建FTP站点并设置权限?
悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音
如何快速选择适合个人网站的云服务器配置?
Laravel如何实现数据库事务?(DB Facade示例)
Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验
如何快速上传建站程序避免常见错误?
Java解压缩zip - 解压缩多个文件或文件夹实例
如何在阿里云部署织梦网站?
怎样使用JSON进行数据交换_它有什么限制
如何在阿里云ECS服务器部署织梦CMS网站?
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
如何快速生成橙子建站落地页链接?
Laravel如何使用Collections进行数据处理?(实用方法示例)
Laravel storage目录权限问题_Laravel文件写入权限设置
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
QQ浏览器网页版登录入口 个人中心在线进入
韩国服务器如何优化跨境访问实现高效连接?
javascript如何操作浏览器历史记录_怎样实现无刷新导航
如何在腾讯云服务器快速搭建个人网站?
Laravel如何记录自定义日志?(Log频道配置)
如何用搬瓦工VPS快速搭建个人网站?
使用C语言编写圣诞表白程序
Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】

