翻译翻译,什么是final!

1. 什么是 final

final 是 java 中的关键字,表示“最终的,不可变的”。

final 就相当于一把,而且这把锁的钥匙还丢了,所以被他修饰的所有东西都是最终的。

现实生活中我们常用到的和 final 相关的英语短语:

final exam : 期末考试
复制代码

哈哈哈,话题扯远了,我们接着说 java 中 final 的用法。

2. final 用法

2.1 final 修饰的变量只能赋一次值

例如:

上面的例子中 final 修饰的 name 表示最终变量。

2.2 final 修饰的类无法继承

举个不好听的例子,被 final 修饰的类就像个“太监”一样,所以没有后代,没有人可以继承他。

2.3 final 修饰的方法无法覆盖

就像女娲造人这一绝招既不传男也不传女。

2.4 final 修饰的引用不能重新指向其他对象

上面的例子中 final 修饰的 animal1 引用不能再指向一个新的对象,但是 animal1 指向的对象还可以修改属性值,例如:

public class Animal {
    String name;
    public static void main(String[] args) {
        final  Animal animal1 = new Animal();
        animal1.name = "哈士奇";
        System.out.println(animal1.name);
        System.out.println("-----------");
        animal1.name = "牧羊犬";
        System.out.println(animal1.name);
    }
}
复制代码

运行结果:

这就相当于某地颁发限房令之后,每个人凭身份证只能购一套房,虽然不能买第二套房了,但是房子里的家具我可以随便换。

2.5 final 修饰的实例变量必须初始化

因为 final 的意思是最终的,你不赋值相当于刚开始是空值,后面还可以赋值,就与 final 的意思前后矛盾了。

2.6 final 和 static 连用

在实际开发中,我们一般不会扯淡到用一个 final 修饰一个类,不让其他类继承。也不会扯淡到用 final 修饰一个方法,不让其他类重写。更不会扯淡到专门用 final 修饰一个对象,感觉这个对象多牛逼似的。

我们一般会把 final 和 static 连用,用来表示一些常量

例如:

// OSS相关常量类
public class ConstantsOSS {
    
    public static final String DEFAULT_CHARSET = "UTF-8";

    public static final Integer INPUT_BUFFER_SIZE = 256;

    public static final int GB = 1024 * 1024 * 1024;
}
复制代码

因为 static 修饰的变量是和类相关的,直接可以用 类名.变量名获取,而 final 修饰的变量又表示不可修改的,所以 static 和 final 修饰的变量又叫常量,也就是永久不可修改的变量。

使用的时候我们直接类名.变量名获取数据,例如:

public class FinalTest {
    public static void main(String[] args) {
        System.out.println(ConstantsOSS.DEFAULT_CHARSET);
        System.out.println(ConstantsOSS.GB);
        System.out.println(ConstantsOSS.INPUT_BUFFER_SIZE);
    }
}
复制代码

猜你喜欢

转载自juejin.im/post/7037090228800061448