在 Java 语言众多的关键字中,final 关键字无疑是被提到最多的,也是在面试过程中经常被问到的知识点。今天,老王查找了很多材料,最后终于收集了关于 final 关键字比较全的知识点。首先,final 关键字可以修饰的对象有三个:一是修饰变量、二是修饰方法、三是修饰类,下面我们来看经过 final 关键字修饰的这三种对象会有着怎样的不同。
1,final 关键字修饰变量
在使用 final 关键字修饰变量时,又可以分为两种情况:一种是基本数据类型的变量、另一种是引用类型的变量。final 关键字在修饰基本数据类型时必须对变量赋予初始值,因此,final 关键字也经常和 static 关键字一起用来声明常量值,final 正好限制了必须赋值、static 声明了静态变量。
class="hljs java;toolbar:true rust">monospace; font-size: 13px; margin: 0px; padding: 0px; border: none; border-radius: 0px; overflow: visible; display: block; line-height: 1.5;">// 定义常量
final static String str = "老王说编程";
修饰引用变量时,该引用变量如果已经被赋值则不可以再被赋值,否则也会出现不能被编译的情况。
// 定义一个 Main 对象并且实例化
final Main main = new Main();
// 被 final 关键字修饰后,再次对 Main 对象进行赋值时就会出现错误
main = new Main();
2,final 关键字修饰方法
通过 final 关键字修饰的方法是不能被子类的方法重写的,相当于一个方法的功能已经被定了不能进行重写修改。一般情况下,如果一个方法的功能已经确定好不再改变了则可以使用 final 关键字修饰一下,因为 final 关键字修饰以后的方法是在程序编译的时候就被动态绑定了不用等到程序运行的时候被动态绑定,这样就大大的提高了执行的效率。
function">publicfinalvoidmethod(){
System.out.println("it is final method");
}
3,final 关键字修饰类
被 final 关键字修饰的类一般叫 final 类,final 类是不能被继承的,这也就意味着 final 类的功能一般是比较完整的。因此,Jdk 中有很多类都是用 final 关键字进行修饰的,它们不需要被继承。其中,最常见的 String 类就是 fianl 关键字修饰的类,还有其他的装饰类等等。
public final classStringimplementsjava.io.Serializable, Comparable<String>, CharSequence {
}
public final classIntegerextendsNumberimplementsComparable<Integer>{
}
public final classLongextendsNumberimplementsComparable<Long>{
}
以上包括其他的装饰器类都是被 final 关键字进行修饰的,它自身提供的方法和功能也是非常完备的。
4,static 关键字的不同
既然文章说明 final 关键字,难免会让人联想到 static 关键字的使用场景,毕竟,final static 成对出现的频率也是比较高的。使用 static 修饰的变量只会在类加载的时候被初始化不会因为对象的再次创建而改变。
// 在类中定义一个变量 num 接收随机数,因为只有类对象加载的时候 num 值才会初始化,
// 因此,在之后 num 的值都是不会改变的
static double num = Math.random();
更多精彩前往微信公众号【老王说编程】>>>