final关键字你真正了解吗?

final修饰类,表示该类不能被继承

final修饰属性,表示该属性类型是一个常量

final修饰方法,表示该方法不能重写,但是可以继承。

参考资料:你以为你真的了解final吗?

一、final的变量

1.1、final的成员变量

1.1.1、final修饰的成员变量的赋初值的时机

在这里插入图片描述
在这里插入图片描述

1.2、final的局部变量

final的局部变量必须显示赋值,并且不能对其修改;如果没有初始化,他只能赋值一次,再次赋值就会报错!

1.3、final修饰的数据类型真的不能被重新赋值吗?

1.3.1、final基本数据类型 vs final引用数据类型

final修饰的基本数据类型是不能被重新赋值的,但是final修饰的引用数据类型,只是他的引用不能变,但是他的属性是可以变的。

宏变量(即常量)

满足条件有以下三个:
1、被final修饰
2、声明变量时,进行初始化赋值
注意:当程序中其他地方使用该宏变量的地方,编译器会直接替换成该变量的值

二、final方法

2.1、父类的final方法是不能够被子类重写的

2.2、final方法是可以被重载的

三、final类

3.1、表示该类不能被继承(当子类继承父类时,父类可能会被子类修改属性的风险,所以当不想被子类继承,就用final修饰)

3.2、final的不可变类

被final修饰的类,创建实例时,实例变量不可改变。就是不可变类。

3.3、需满足以下几个条件:

1、用 private 和 final 修饰的实例变量
2、用带参的构造器初始化实例变量
3、仅能提供getter方法,不能提供setter方法,因为普通方法是不能初始化final修饰的成员变量
4、如果有必要就重写Object类 的hashCode()和equals()方法,应该保证用equals()判断相同的两个对象其Hashcode值也是相等的。

JDK中提供的八个包装类和String类都是不可变类。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值