02.Java 关键字 - final

基本概念

final 有“这是无法改变的”或者“终态的”含义。

final关键字可以用来修饰类、方法和变量(包括成员变量和局部变量)。


final 变量

1.基本数据类型和引用类型

对于一个 final 变量:

  • 如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改

  • 如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象

class Person { 
    public int name = 0;
}

public class Test {

    public static void main(String[] args) {
        final String word ;
        final Person  person;

        word ="hello";
        person = new Person();

        // 再次赋值,编译器报错
        word="hello";         

        // 修改引用,编译器报错      
        person = new Person();  

        // 输出:1,表示引用对象的内容是可变的
        System.out.println(++person.name);  
    }
}

2.final 常量和 final 变量

当 final 变量是基本数据类型以及 String 类型时,如果在编译期间能知道它的确切值,则编译器会把它当做编译期常量使用。

public class Test {
    public static void main(String[] args) {
        // 在编译期就能知道确切值 --> 是编译期常量
        final String a1 = "good";   
        // 编译期常量被更改时会直接替换为自己的值
        String b1 = a1 + "bye"; 
        // 因此输出 true
        System.out.println((b1 == "goodbye"));  

        // 普通变量
        String a2 = "good"; 
        // 更改值时通过更改对象的引用链接来实现
        String b2 = a2 + "bye"; 
        // 因此输出 false
        System.out.println((b2 == "goodbye"));
    }
}

如果在编译期间不能知道它的确切值时,会是怎样的情况呢

public class Test{

    public static void main(String[] args) {
        // 此时 a 相当于是一个引用类型
        final String a =getWord(); 

        String b = a+"bye";

        //false
        System.out.println(b=="goodbye");   
    }

    public static String getWord(){
        return "good";
    }
}

final 类

final 修饰一个类时,表明这个类不能被继承

private 修饰方法会隐式地被指定为 final 方法;

final 类中的所有成员方法都会被隐式地指定为final方法。


final 方法

把方法锁定,方法可以随着类继承得到,但不能被重写;

高效,由于不能被重写,但是不能实现动态绑定,只能实现静态绑定;静态绑定表示在编译期就可以确定具体的对象,从而提高性能。


参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

oxf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值