final关键字
final 关键字可以用来修饰类、方法和变量,其含义和作用如下:
1、修饰类:
一个被 final 修饰的类不能被继承。例如:
public final class FinalClass {
// 类内容
}
// 下面的代码会导致编译错误
// public class SubClass extends FinalClass {
// }
2、修饰方法
一个被 final 修饰的方法不能被子类重写。例如:
public class Parent {
public final void display() {
System.out.println("Parent display");
}
}
public class Child extends Parent {
// 下面的代码会导致编译错误
// public void display() {
// System.out.println("Child display");
// }
}
3、修饰变量
被 final 修饰的变量在初始化后不能被修改。它可以是成员变量,也可以是局部变量。对于引用类型,final 关键字确保引用不可变,但引用的对象本身可以是可变的,例如:
public class Example {
public static void main(String[] args) {
final int x = 10;
// 下面的代码会导致编译错误
// x = 20;
final MyClass obj = new MyClass();
// obj = new MyClass(); // 编译错误,因为 obj 不能被重新赋值
obj.value = 100; // 合法,因为 obj 引用的对象是可变的
}
}
class MyClass {
int value;
}
static 关键字
static 关键字用于修饰类的成员(变量和方法),以及静态代码块。
1、修饰变量(静态变量)
一个被 static 修饰的变量是类变量,它属于类,而不是某个特定的实例。所有实例共享这个变量。
public class Example {
public static int count = 0;
public Example() {
count++;
}
public static void main(String[] args) {
Example obj1 = new Example();
Example obj2 = new Example();
System.out.println(Example.count); // 输出 2
}
}
2、修饰方法(静态方法)
一个被 static 修饰的方法是类方法,可以不通过实例调用。静态方法不能访问实例变量和实例方法,但可以访问静态变量和静态方法。
public class Example {
public static void display() {
System.out.println("Static method");
}
public static void main(String[] args) {
Example.display(); // 直接通过类名调用
}
}
3、静态代码块
静态代码块在类加载时执行,用于初始化静态变量。
public class Example {
static int count;
static {
count = 10;
System.out.println("Static block executed");
}
public static void main(String[] args) {
System.out.println(Example.count); // 输出 10
}
}
final 和 static 结合使用
可以将 final 和 static 结合使用,通常用于定义常量。
public class Constants {
public static final int MAX_VALUE = 100;
}
在这种情况下,MAX_VALUE 是一个类常量,在类加载时初始化,且在整个生命周期中不能被修改。