🏀🏀🏀来都来了,不妨点个关注!
🎧🎧🎧博客主页:欢迎各位大佬!
1.final关键字的含义
final意味着 “最终的”,“不可变的”,用于表示修饰的内容是不可变的或者不能重写的。它可以用于类、方法,变量(包括成员变量和局部变量)。
2.final修饰类
当final修饰一个类的时候,表示这个类不能被继承,即不能有子类。
如下代码:
final class A{
//类的实现
}
// 下面的代码会导致编译错误,因为A是final的
class B extends A{
// 子类的实现
}
优点:提高安全性,提高程序的可读性。
3.final修饰方法
当final修饰一个方法时,这个方法不能被重写(override)。这意味着在子类中不能提供一个具有相同签名的方法。这通常用于确保某个方法的行为在继承层次结构中始终如一。但值得注意的是被final修饰的方法不能被重写,但可以重载。
class Parent {
final void show() {
System.out.println("This is a final method.");
}
final void show(int x) {
System.out.println("This is a final method." + x);
}
}
class Child extends Parent {
// 下面的代码会导致编译错误,因为show()方法被声明为final
// @Override
// void show() {
// System.out.println("This is Child's show method.");
// }
}
优点:提高性能,提高代码的可维护性和可读性。
4.final修饰变量
当final修饰一个变量时,这个变量的值在初始化之后就不能被改变。即为常量,常量名一般全大写,单词之间用下划线分割。对于引用类型的变量,final表示引用本身不可变,而不是它所指向的对象的内容不可变。 final变量必须被初始化。
final int CONSTANT_VALUE = 100; // 常量
CONSTANT_VALUE = 200; // 这行代码会导致编译错误,因为CONSTANT_VALUE是final的
final StringBuilder s = new StringBuilder("Hello");
sb.append(" World!"); // 这是允许的,因为sb引用没有改变,只是改变了它指向的对象的内容
sb = new StringBuilder("Goodbye"); // 这行代码会导致编译错误,因为sb是final的
final声明常量
final常与static和public一起使用来声明常量。这样做的好处:
- public 表示这个常量可以被其他任何类访问
- static 表示这个常量不依赖于对象,可以直接通过类名.的方式进行访问
- final 表示这个常量的值是不可变的
public class Constants {
public static final int MAX_VALUE = 100; // 公共静态常量
}
这样的常量通常用于表示不会改变的值,例如配置参数或数学常量。