《JAVA编程思想》读书笔记之final

本文详细解析了Java中的final关键字,包括其在数据、方法及类上的应用。解释了final数据不可改变的特点,final方法防止被子类覆盖的作用以及final类禁止被继承的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

final关键字最简单明了的含义就是“无法改变的”,有三种使用情况:final数据,final方法和final类,另外,参数列表中也可以使用final,那意味着可以读参数,但是无法修改参数;

1、final数据

final数据有两种用途,一个是我们可以获得一个永不改变的“编译时常量”,另一个是定义一个在运行时被初始化的值,并且不希望它被改变。一个既是final又是static的字段只占据一段不能改变的存储空间。

当对基本类型的字段使用final时,意味着该字段的数值将不会改变;当对一个对象的引用使用final时,那意味着该对象的引用不会改变;JAVA允许定义一个final 字段时不进行初始化,也就是书上说的“空白final”,这就使得final关键字的使用有了更大的灵活性。我们可以定义一个final字段,让它根据对象的不同而有所不同,但是保证该对象的类型不改变。但是在使用空白final时,必须在字段的定义处或者构造器中对字段进行初始化。例如:

public class BlankFinal{
    
private final int i;
    
public BlankFinal(){//必须在构造函数中对final字段进行初始化
        i = 1;
    }

    
public void with(int x){//如果象这样定义,则编译器会报错,因为i是final的,不允许修改
        i = x;
    }

}

final可以作为参数列表中的参数,如以下代码:

class Test{
    
public Test(){
        System.out.println(
"这是一个练习");
    }

}

public class FinalTest{
    
public static void main(String args[]){
        
    }

    
void with(final Test t){//在with方法中,使用final关键字定义参数;
        t = new Test();//象这样的定义是不允许的,因为参数t是对象引用,并且是final 的,不允许被修改;    }

}

如果不是看书,我还真的不知道final还可以用于参数列表,但是在以前的编程练习中,好象也很少会有需要包参数列表定义为final的情况。

2、final方法

将方法定义为final有两个原因,一个是希望在继承过程中确保该方法的行为保持不变,不会被子类覆盖;另一个原因是考虑到效率,其实这个原因我自己也不是很理解,这里就只做一下笔记吧。

3、final类

如果把一个类定义为final,那么就意味着这个类永远都不会被继承,不允许有任何子类。对于一个final类,该类中任何方法都隐式的定义为final的,不会被其他类所覆盖。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

低音钢琴

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

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

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

打赏作者

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

抵扣说明:

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

余额充值