Java static关键字详解
需积分: 10 173 浏览量
更新于2024-09-12
收藏 7KB TXT 举报
"Java之static用法"
在Java编程语言中,`static`关键字具有重要的作用,它用于修饰类的成员变量、成员方法以及代码块。`static`关键字的使用有以下几个关键点:
1. **静态变量(static fields)**:当一个变量被声明为`static`时,这个变量称为静态变量,它属于类而不是类的实例。这意味着所有类的实例共享同一份静态变量的拷贝。静态变量在类加载时初始化,并且可以通过类名直接访问,而无需创建对象。例如,`Test5`类中的`private static int a`就是一个静态变量。
2. **静态方法(static methods)**:`static`修饰的方法称为静态方法,如`main`方法。静态方法同样属于类,不依赖于类的实例就可以调用。它们不能访问非静态成员,因为非静态成员与类的每个实例关联。例如,`Test5`类中的`public static void main(String[] args)`就是静态方法,它是程序的入口点。
3. **静态代码块(static blocks)**:`static`代码块在类加载时执行一次,用于初始化静态变量。例如,`Test5`类中有两个静态代码块,它们按顺序执行并初始化`a`的值。
4. **访问权限与static**:静态成员可以是`private`、`protected`或`public`。如果一个静态成员被声明为`private`,那么它只能在定义它的类内部访问。`static`关键字不能与`final`一起修饰局部变量,但可以与`final`一起修饰成员变量,形成常量。
5. **内存管理与static**:静态变量存储在方法区(在Java 8后称为元空间Metaspace),而非堆内存。因此,静态变量不会随着对象的创建和销毁而改变。在示例代码中,`Test5`类的`a`变量在不同静态代码块和`main`方法中被修改,体现了静态变量在整个类生命周期中的单一实例特性。
6. **静态与非静态的交互**:静态方法无法直接访问非静态成员,因为非静态成员是依赖于具体对象的。在`Test5`类的`f()`方法中,由于没有`static`关键字,它是一个非静态方法,可以访问非静态变量`b`,并且可以使用`this`关键字来引用当前对象。
7. **内嵌类(Inner Class)与static**:对于内嵌类,可以声明为`static`,这样的类称为静态内嵌类(Static Nested Class)。静态内嵌类不持有对外部类的引用,可以直接通过类名创建实例,而普通内嵌类需要先创建外部类的实例。
总结来说,`static`关键字在Java中用于创建类级别的共享数据和行为,这使得它们在多线程环境、工具类和全局配置等方面有着广泛的应用。理解和正确使用`static`关键字是编写高效、可维护Java代码的关键。
2010-05-26 上传
2012-07-03 上传
2024-05-08 上传
2020-09-04 上传
2009-03-28 上传
2020-08-25 上传
2020-09-02 上传
2020-08-29 上传
2020-12-22 上传
my_kw
- 粉丝: 5
- 资源: 8
最新资源
- 火炬连体网络在MNIST的2D嵌入实现示例
- Angular插件增强Application Insights JavaScript SDK功能
- 实时三维重建:InfiniTAM的ros驱动应用
- Spring与Mybatis整合的配置与实践
- Vozy前端技术测试深入体验与模板参考
- React应用实现语音转文字功能介绍
- PHPMailer-6.6.4: PHP邮件收发类库的详细介绍
- Felineboard:为猫主人设计的交互式仪表板
- PGRFileManager:功能强大的开源Ajax文件管理器
- Pytest-Html定制测试报告与源代码封装教程
- Angular开发与部署指南:从创建到测试
- BASIC-BINARY-IPC系统:进程间通信的非阻塞接口
- LTK3D: Common Lisp中的基础3D图形实现
- Timer-Counter-Lister:官方源代码及更新发布
- Galaxia REST API:面向地球问题的解决方案
- Node.js模块:随机动物实例教程与源码解析