Java的static

news/2025/1/11 23:55:03/

在Java中,static是一个关键字,用于声明属性、方法、代码块或内部类。static的主要特性是它关联于类而不是类的实例(对象)。因此,你可以在不创建对象的情况下直接通过类名访问静态成员。

下面我将详细解释static的各种用法及其含义:

 

静态变量(Static Variables)

静态变量属于类,而不是类的任何特定实例。这意味着无论创建多少个对象,都只有一个静态变量的副本。静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象访问(但是这是不推荐的)。

java">public class MyClass {  static int staticVar = 42;  
}  public class Main {  public static void main(String[] args) {  System.out.println(MyClass.staticVar); // 输出 42  }  
}


静态方法(Static Methods)

静态方法属于类,而不是类的任何特定实例。静态方法不能访问类的非静态成员(变量和方法),因为非静态成员需要类的实例才能存在。静态方法可以通过类名直接调用。

java">public class MyClass {  static void staticMethod() {  System.out.println("This is a static method.");  }  
}  public class Main {  public static void main(String[] args) {  MyClass.staticMethod(); // 输出 "This is a static method."  }  
}


静态代码块(Static Blocks)

静态代码块在类加载时执行一次,并且仅执行一次。它通常用于初始化静态变量。

java">public class MyClass {  static int staticVar;  static {  staticVar = 42;  System.out.println("Static block executed.");  }  
}  public class Main {  public static void main(String[] args) {  System.out.println(MyClass.staticVar); // 输出 42,并且控制台还会显示 "Static block executed."  }  
}

静态内部类(Static Inner Classes)

静态内部类不持有外部类的引用,因此不能访问外部类的非静态成员。静态内部类可以独立于外部类存在,并且可以有自己的静态和非静态成员。

java">public class OuterClass {  static class StaticNestedClass {  void message() {  System.out.println("Static Nested Class");  }  }  
}  public class Main {  public static void main(String[] args) {  OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();  nestedObject.message(); // 输出 "Static Nested Class"  }  
}

总之,static关键字在Java中用于定义与类关联而不是与对象关联的属性、方法或代码块。这有助于节省内存空间(因为静态成员在内存中只有一个拷贝)并提供一种在不需要创建对象的情况下访问类级别功能的方式。


http://www.ppmy.cn/news/1443467.html

相关文章

335GB,台北地区倾斜摄影OSGB数据V0.2版介绍!

前几天发布了台北地区倾斜摄影OSGB数据第一个版本(139GB,台北倾斜摄影OSGB数据V0.1版),虽然数据还是一个半成品,完全没想到热度很高,很多读者对这份数据都有比较浓厚的兴趣,在这里首先感谢各位读者的大力支持与鼓励,给了我持续更新…

使用JavaScript日历小部件和DHTMLX Gantt的应用场景(一)

DHTMLX Suite UI 组件库允许您更快地构建跨平台、跨浏览器 Web 和移动应用程序。它包括一组丰富的即用式 HTML5 组件,这些组件可以轻松组合到单个应用程序界面中。 DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表,可满足项目管理应用…

Mysql(数据库)知识详解终章~{日志,Mycat}

数据库里面的日志是记录数据库运行期间状态信息的文件,Mycat是一个开源的分布式数据库系统。 数据库日志主要包括错误日志、查询日志、慢查询日志、事务日志和二进制日志等几大类。具体如下: 错误日志:记录了数据库服务器启动、运行或停止时…

代谢组数据分析六:其他分析

Other Analysis {#OtherAnalysis} 除了常见的功能分析,还有其他的功能分析方法或R包。本章节主要介绍其他功能分析的方法以及结果解析。 所需要的数据:链接: https://pan.baidu.com/s/1xezhpZRebCsct0AtlDpSHg 提取码: 2djy FELLA: an R package to enrich metabolomics d…

javaEE初阶——多线程(八)——常见的锁策略 以及 CAS机制

T04BF 👋专栏: 算法|JAVA|MySQL|C语言 🫵 小比特 大梦想 此篇文章与大家分享分治算法关于多线程进阶的章节——关于常见的锁策略以及CAS机制 如果有不足的或者错误的请您指出! 目录 多线程进阶1.常见的锁策略1.1乐观锁和悲观锁1.2重量级锁 和 轻量级锁1.…

MySQL数据库删除关联数据

在MySQL数据库中,当你想要删除某个数据表的条目,而这个条目与其他表通过外键建立了一对多或多对多的关联时,你需要确保在删除操作中也考虑到了这些关系。这可以通过以下几种方法来实现: 手动删除关联条目: 首先&#x…

STM32 SPI通信

一、SPI总线简介 1.1 SPI总线 串口外设接口(Serial Peripheral Interface,SPI)总线是一种同步串行外设接口,允许MCU与各种外围设备进行全双工、同步串行通信 SPI总线有四根通信线: ①SCK(Serial Clock&a…

使用Python和Pygame创建贪吃蛇游戏 [附源码]

目录 引言: 安装Pygame: 创建游戏窗口: 初始化游戏变量: 绘制蛇和食物: 游戏循环: 运行结果: 结语: 引言: 贪吃蛇游戏是一款经典的游戏,它简单…