在Java中,final 关键字是一个非常重要的修饰符,用于控制变量、方法或类的不可变性或不可覆盖性。下面我将通过文字解释和代码示例详细讲解 final 关键字的用法。
1. final 关键字概述
final 关键字可以用于以下三种场景:
变量:用于声明常量,使其值在初始化后不能被修改。
方法:用于防止方法被子类重写(Override)。
类:用于声明一个类不能被继承。
2. final 修饰变量
当 final 修饰变量时,表示该变量的值一旦被初始化后就不能被修改,即该变量为常量。
2.1. final 修饰基本数据类型变量
public class FinalVariableExample {
public static void main(String[] args) {
final int MAX_SIZE = 100; // 声明一个常量
System.out.println("MAX_SIZE: " + MAX_SIZE);
// MAX_SIZE = 200; // 编译错误:无法为最终变量赋值
}
}
解释:
MAX_SIZE是一个 final变量,一旦被赋值后,其值不能被修改。
如果尝试修改 MAX_SIZE的值,编译器会报错。
2.2. final修饰引用类型变量
public class FinalReferenceExample {
public static void main(String[] args) {
final Person person = new Person("Alice");
System.out.println("Person name: " + person.getName());
person.setName("Bob"); // 可以修改引用对象的属性
System.out.println("Person name after modification: " + person.getName());
// person = new Person("Charlie"); // 编译错误:无法为最终变量赋值
}
}
class Person {
private String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
解释:
person 是一个 final 引用变量,表示 person 引用不能指向其他对象。
但是,可以通过 person 引用修改对象的属性,例如 setName 方法。
如果尝试让 person 引用指向另一个 Person 对象,编译器会报错。
3. final 修饰方法
当 final 修饰方法时,表示该方法不能被子类重写(Override)
class Base {
public final void display() {
System.out.println("Base class display method");
}
}
class Derived extends Base {
// @Override // 编译错误:无法覆盖最终方法
public void display() {
System.out.println("Derived class display method");
}
}
解释:
Base 类中的display 方法被final修饰,表示该方法不能被子类Derived 重写。
如果子类尝试重写display 方法,编译器会报错。
4.fina修饰类
当final修饰类时,表示该类不能被继承。
final class FinalClass {
public void show() {
System.out.println("FinalClass show method");
}
}
// class DerivedFromFinal extends FinalClass { // 编译错误:无法继承最终类
// public void show() {
// System.out.println("DerivedFromFinal show method");
// }
// }
解释:
FinalClass 被 final 修饰,表示该类不能被其他类继承。
如果尝试继承 FinalClass,编译器会报错。
5. final 关键字的总结
变量:
基本类型:final 变量是常量,值不可变。
引用类型:final 引用不能指向其他对象,但对象本身可以修改。
方法:
final 方法不能被子类重写。
类:
final 类不能被继承。
使用 final 关键字可以提高代码的安全性和稳定性,防止意外修改或重写关键代码。
6. 完整示例
public class FinalKeywordExample {
public static void main(String[] args) {
// Final variable example
final int MAX_VALUE = 100;
System.out.println("MAX_VALUE: " + MAX_VALUE);
// Final reference example
final Person person = new Person("Alice");
person.setName("Bob");
System.out.println("Person name: " + person.getName());
// Final method example
Base base = new Base();
base.display();
// Final class example
FinalClass finalClass = new FinalClass();
finalClass.show();
}
}
class Person {
private String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
class Base {
public final void display() {
System.out.println("Base class display method");
}
}
final class FinalClass {
public void show() {
System.out.println("FinalClass show method");
}
}
标签:Java,final,person,class,Person,详解,public,name From: https://blog.csdn.net/lxsxjsj/article/details/144060817