一、final介绍
在Java中,final 关键字用于声明一个变量、方法或类是不可变的。它可以应用于以下几个上下文中:
1. 修饰变量
当用 final 修饰一个变量时,表示该变量只能被赋值一次,即它是一个常量。一旦赋值后,就不能再修改。例如:
final int NUM = 10;
2. 修饰方法:
当用 final 修饰一个方法时,表示该方法不能被子类重写(覆盖)。例如:
Copy code
public final void someMethod() {
}
3 .修饰类
当用 final 修饰一个类时,表示该类不能被继承,即它是一个最终类。例如:
Copy code
public final class SomeClass {
}
作用
final 的作用是提供一种约束机制,确保变量、方法或类的状态在初始化后不会被修改,或者在继承和扩展方面提供额外的安全性。使用 final 可以使代码更易于理解和维护,并提高代码的安全性和健壮性。
如果不添加 final 关键字,则变量、方法或类将不受约束,可以随时被修改或继承。
二、与static的比较
当涉及到 final 关键字时,可以将其与其他关键字进行比较,例如 static。下面是关于 final 和 static 的比较:
1. final vs. static:
final 关键字用于声明不可变的变量、方法或类,其值在初始化后不能被修改。
static 关键字用于声明静态变量、方法或类,其在类加载时初始化,且只有一份拷贝,可以通过类名直接访问。
2. final vs. 非final:
使用final 声明的变量是不可变的,它的值在初始化后不能被修改。这种约束可以提高代码的安全性和健壮性,因为它防止了意外的修改。
没有使用final 声明的变量是可变的,可以被重新赋值。这意味着它的值可以在程序的执行过程中改变。
3. final vs. 静态final:
final变量在初始化后值不可变,但是它可以是实例变量(每个对象有自己的值)或静态变量(所有对象共享相同的值)。
静态final变量在初始化后值也不可变,但它只有一份拷贝,被所有对象共享。
综上所述,final 关键字提供了一种在程序中创建不可变的元素的机制,而 static关键字则提供了一种在整个类享数据的机制。它们在不同的情况下可以用于增加代码的安全性、性能或逻辑清晰度。
4、final变量分析
public class FinalExample {
final int MAX_VALUE = 100;
public void display() {
System.out.println("MAX_VALUE: " + MAX_VALUE);
}
public static void main(String[] args) {
FinalExample obj = new FinalExample();
obj.display();
}
}
5. 静态final变量示例
public class StaticFinalExample {
static final double PI = 3.14;
public void display() {
System.out.println("PI: " + PI);
}
public static void main(String[] args) {
StaticFinalExample obj1 = new StaticFinalExample();
StaticFinalExample obj2 = new StaticFinalExample();
obj1.display();
obj2.display();
}
}
6. static方法示例:
public class StaticMethodExample {
static int counter = 0;
public static void incrementCounter() {
counter++;
}
public void displayCounter() {
System.out.println("Counter: " + counter);
}
public static void main(String[] args) {
StaticMethodExample.incrementCounter();
StaticMethodExample.incrementCounter();
StaticMethodExample obj = new StaticMethodExample();
obj.displayCounter();
}
}