final关键字

01.final类

如果一个类使用了final关键字修饰,那么他就无法被继承,例如很常见的String类就是final类。

不过,类是可变的,并不意味着该类的对象是不可变的。

public final class Writer {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
Writer writer = new Writer();
writer.setName("沉默王二");
System.out.println(writer.getName()); // 沉默王二

02final方法

被final修饰的方法不能被重写,否则会出现编译错误。

03final变量

被 final 修饰的变量无法重新赋值。
1)final修饰的基本数据类型
栗子:

 final int age=18

age的量就不能再被改变
2)final修饰的引用类型
在举个栗子,声明一个普通的类Pig,他有一个字段name

public class Pig {
   private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

在测试类中声明一个 final 修饰的 Pig 对象:

 final Pig pig = new Pig();

如果尝试将 pig 重新赋值的话,编译器同样会生气
在这里插入图片描述
但我们仍然可以去修改 Pig 的字段值:

final Pig pig = new Pig();
pig.setName("特立独行");
System.out.println(pig.getName()); // 特立独行

3)final 修饰的字段
final 修饰的字段可以分为两种,一种是 static 的,另外一种是没有 static 的,就像下面这样:

public class Pig {
   private final int age = 1;
   public static final double PRICE = 36.5;
}

非 static 的 final 字段必须有一个默认值,否则编译器将会提醒没有初始化:
在这里插入图片描述
static 的 final 字段也叫常量,它的名字应该为大写,可以在声明的时候初始化,也可以通过 static 代码块初始化

  1. final 修饰的参数
    final 关键字还可以修饰参数,它意味着参数在方法体内不能被再修改:
public class ArgFinalTest {
    public void arg(final int age) {
    }

    public void arg1(final String name) {
    }
}

如果尝试去修改它的话,编译器会提示以下错误:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值