Java填坑之Final

Final关键字

在学习《Effective Java》的时候,学习到了各种各样之前在写代码中没有用到过的方法,在不可变类中,我们频频用到final关键字,还有在面试题中也有看到例如“final修饰究竟是引用不可变还是引用的内容不可变”之类的问题,非常考我们Java基础,所以记录一下我自己的复习过程填填坑。

  • 方法
  • 变量

当用final修饰一个类时,表示这个类不能被继承,也就是说,当我们不希望这个类被继承时,我们就用final修饰这个类,它的成员方法也默认为final的,但是成员变量是可以改变的,这么说可能比较难记,我们直接上代码演示:

我们先定义一个final修饰的father类
在这里插入图片描述
当我们想写一个Son类继承Father类的时候发现报错:不能从final的Father类继承
在这里插入图片描述
但是Final类的成员变量是可以改变的,我们也来测试一下:
在这里插入图片描述

方法

知道了final修饰类就是让类不可被继承,我们来看看当final修饰方法的时候有什么用处;引用《Thinking in Java》中的一段:“使用final方法的原因有两个。第一个原因是把方法锁定,以防任何继承类修改它的含义;第二个原因是效率。在早期的Java实现版本中,会将final方法转为内嵌调用。但是如果方法过于庞大,可能看不到内嵌调用带来的任何性能提升。在最近的Java版本中,不需要使用final方法进行这些优化了。” 简而言之就是在被继承的时候,当我们不想某个方法被子类重写,我们就可以用final修饰这个方法,但是子类可以调用父类的final方法;我们也通过一段代码来演示:

方法没有加final修饰 方法被子类重写在这里插入图片描述
在这里插入图片描述
方法加了final修饰 方法不能被子类重写

在这里插入图片描述
在这里插入图片描述
子类可以调用父类的final方法
在这里插入图片描述

变量

  1. final修饰的变量的值不能更改,即不能再次赋值,即使赋的新值与旧值一样也不可以,代码演示:在这里插入图片描述
  2. final修饰的成员变量和局部变量需要在使用前赋值,对于成员变量,可以直接赋值,也可以在构造器中赋值,但是有多个同构造器的时候,每个构造方法都要有赋值语句。在这里插入图片描述在这里插入图片描述
  3. 如果静态成员变量被修饰为final,那么该变量可看成是全局变量,即在类的整个加载期间,其值都不可变。在这里插入图片描述
  4. 当变量为基本数据类型时,变量的值不可更改;当变量为引用类型时,变量本身的值不可更改,即该变量不能指向其他的对象或数组;但该变量指向的对象或数组本身的内容是可以改变的;在这里插入图片描述
    在这里插入图片描述
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值