到底如何使用“final”关键字?

final

不可改变。 可以用于修饰 方法变量
        类: 被修饰的类, 不能被继承。
        方法: 被修饰的方法, 不能被重写。
        变量: 被修饰的变量, 不能被重新赋值。

格式

1.修饰类

final class 类名{
    // TODO
}

Java API中有很多类如,public final class String、public final class Math等,都是作者不让我们修改类的内容。

2.修饰方法

修饰符 final 返回值类型 方法名(参数){
    // TODO
}

final修饰的方法不可覆盖重写

3.修饰基本类型的局部变量

基本类型的局部变量,被final修饰后,只能赋值一次,不能再次修改。

public class Final{
    public static void main(String[] args){
        // 声明局部变量,用final修饰
        final int a;
        // 第一次赋值
        a = 10;
        // 第二次赋值
        a = 20;  // 报错,不可重复赋值

        // 声明变量,直接赋值
        final int b = 10;
        // 第二次赋值
        b = 20; // 报错,不可重新赋值
    }
}

4.修饰引用类型的局部变量

引用类型的局部变量,被final修饰后,只能指向一个对象,地址不能再改变,但是不影响对象内部的成员变量值的修改。

public class Final{
    public static void main(String[] args){
        // 创建User对象
        final User u = new User();
        u = new User(); // 报错,指向了新的对象,地址值发生了改变

        // 调用setName方法
        u.setName("张三"); // 其中内容可以修改
    }
}

5.成员变量

被final修饰的常量名称,书写规范是所有字母大写,中间用下划线连接。

涉及到final成员变量初始化,有两种形式,二选一:

a.显式初始化

public class User {
    final String USERNAME = "张三";
    private int age;
}

b.构造方法初始化

public class User {
    final String USERNAME;
    private int age;
    public User(String username, int age){
        this.USERNAME = username;
        this.age = age;
    }
}

猜你喜欢

转载自blog.csdn.net/kepengs/article/details/107511667