Java static关键字详解

需积分: 10 2 下载量 71 浏览量 更新于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代码的关键。