在 Java 中,static
和 final
是两个常用的关键字,它们用于不同的目的。以下是它们之间的区别和各自的用途:
static
关键字
-
用于类的成员:
- 静态变量(类变量): 使用
static
声明的变量是类级别的变量,而不是实例级别。所有实例共享同一个静态变量。 - 静态方法: 使用
static
声明的方法可以不通过实例调用。它们只能访问其他静态成员(变量或方法)。 - 静态块: 静态代码块用于初始化静态变量,在类加载时执行一次。
- 静态变量(类变量): 使用
-
作用域:
- 属于类本身,而不是某个具体的对象实例。
-
用途:
- 用于实现类级别的功能,例如计数器、实用工具方法(
Math
类的sqrt
方法等)。
- 用于实现类级别的功能,例如计数器、实用工具方法(
示例:
class Example {
static int counter = 0; // 静态变量
static void incrementCounter() { // 静态方法
counter++;
}
static { // 静态块
System.out.println("Static block executed");
}
}
final
关键字
-
用于变量:
- 常量: 使用
final
声明的变量在初始化后不能改变,表示一个常量。 - 必须在声明时或构造方法中赋值。
- 常量: 使用
-
用于方法:
- 不可重写: 使用
final
声明的方法不能被子类重写。
- 不可重写: 使用
-
用于类:
- 不可继承: 使用
final
声明的类不能被继承。
- 不可继承: 使用
-
用途:
- 提供安全性和性能优化,通过限制修改或继承来确保不变性。
示例:
final class ImmutableClass { // final 类
final int constantValue = 10; // final 变量
final void display() { // final 方法
System.out.println("This is a final method.");
}
}
总结
static
关键字用于定义类级别的成员,无需实例化即可访问。final
关键字用于创建不可修改的变量、不可重写的方法和不可继承的类。
在使用时,static
和 final
可以组合使用,比如定义静态常量:
lass Constants {
static final double PI = 3.14159; // 静态常量
}
这种组合常用于定义与类相关的不可变常量。