Java中的final修饰符可以用于类、方法和变量上。它的主要作用是表示“最终的”、“不可修改的”、“只能赋值一次的”。
1.final修饰类
当final修饰一个类时,该类不能被继承,即不能有子类。这种情况下,该类的实现被认为是完整、安全和稳定的。例如,String类就是一个final类,因为它的实现中包含了一些重要的安全机制,不能被子类修改。
示例代码:
public final class MyClass {
// 类实现
}
2.final修饰方法
当final修饰一个方法时,该方法不能被子类重写。这种情况下,该方法的实现被认为是最终的、安全的或固定的。例如,Object类中的getClass()方法就是一个final方法,它返回该对象的运行时类型信息,不能被子类修改。
示例代码:
public class ParentClass {
public final void myMethod() {
// 方法实现
}
}
public class ChildClass extends ParentClass {
// 这里编译错误,无法重写myMethod()方法
public void myMethod() {
// 子类实现
}
}
3.final修饰变量
当final修饰一个变量时,该变量的值只能被赋值一次,且不能再次修改。这种情况下,该变量被认为是不可变的、恒定的或常量化的。例如,Math.PI就是一个final变量,因为圆周率是一个固定的常量,不会发生变化。
如果final变量是一个对象引用,那么该变量指向的对象可以被修改,但是不能再将该变量指向另一个对象。
示例代码:
public class MyClass {
public static final int MY_CONSTANT = 100;
// 其他代码...
}
final还可以用于修饰方法参数和局部变量
4.final修饰方法参数
public class MyClass {
public void myMethod(final String str) {
// str不能被重新赋值
System.out.println(str);
}
}
myMethod()方法的参数str被final修饰,表示该参数只能被赋值一次,并且不能被重新赋值。因此,在方法的实现中,不能对str进行重新赋值操作。
5.final修饰局部变量
public class MyClass {
public void myMethod() {
final int num = 100;
// num只能被赋值一次
System.out.println(num);
}
}
myMethod()方法中定义了一个final修饰的局部变量num,表示该变量只能被赋值一次。因此,在方法的实现中,不能对num进行重新赋值操作。