final有哪些用法
在Java中,final
关键字有多种用法,主要用于修饰类、方法和变量。下面将详细介绍每种用法及其含义。
当final
用于变量时,表示该变量是常量,一旦被赋值后就不能再被修改。
public class FinalVariableExample {
public static void main(String[] args) {
final int MAX_VALUE = 100;
System.out.println("Max Value: " + MAX_VALUE);
// MAX_VALUE = 200; // 这行代码会导致编译错误
}
}
MAX_VALUE
被声明为final
,因此在初始化后不能再被赋值。当final
用于方法时,表示该方法不能被子类重写。
class Parent {
public final void display() {
System.out.println("This is a final method.");
}
}
class Child extends Parent {
// public void display() { // 这行代码会导致编译错误
// System.out.println("Trying to override.");
// }
}
public class FinalMethodExample {
public static void main(String[] args) {
Child child = new Child();
child.display(); // 输出: This is a final method.
}
}
display
方法被声明为final
,因此Child
类不能重写该方法。当final
用于类时,表示该类不能被继承。
final class FinalClass {
public void show() {
System.out.println("This is a final class.");
}
}
// class SubClass extends FinalClass { // 这行代码会导致编译错误
// }
public class FinalClassExample {
public static void main(String[] args) {
FinalClass obj = new FinalClass();
obj.show(); // 输出: This is a final class.
}
}
FinalClass
被声明为final
,因此不能有任何子类。对于引用类型的final
变量,表示引用本身不能被改变,但引用的对象的状态是可以改变的。
class Person {
String name;
Person(String name) {
this.name = name;
}
}
public class FinalReferenceExample {
public static void main(String[] args) {
final Person person = new Person("Alice");
System.out.println("Name: " + person.name);
person.name = "Bob"; // 允许修改对象的状态
System.out.println("Updated Name: " + person.name);
// person = new Person("Charlie"); // 这行代码会导致编译错误
}
}
person
被声明为final
,因此不能指向另一个Person
对象。person
对象的属性。final
用于变量时,表示该变量的值不可更改。final
用于方法时,表示该方法不能被重写。final
用于类时,表示该类不能被继承。final
变量,表示引用本身不可更改,但对象的状态可以改变。通过这些用法,final
关键字在Java中提供了对不变性和继承的控制,帮助开发者编写更安全和可维护的代码。