final关键字

final关键字可修饰类,变量和方法。
特性:
1.final关键字修饰的类不能被继承。
2.final修饰的方法不能被子类重写(与父类具有相同的方法名和参数列表),可以重载(相同的方法名,不同的参数列表)
3.final修饰的变量(成员变量和局部变量)是常量,只能赋值一次。

final修饰的类变量、实例变量能指定初始值的地方如下:

类变量(以static修饰的):必须在静态初始化块中指定初始值或声明该类型变量时指定初始值。而且只能在其一指定。

实例变量(不以static修饰的):必须在非静态初始化块、声明该实例变量或构造器中指定初始值。而且只能在其一指定。
在这里插入图片描述
如果打算在初始化块或者构造方法中为final成员变量赋值,则不要在赋值之前访问final成员变量

final局部变量:

inal修饰的变量必须由程序员显示的指定初始值。
final局部变量可以在声明数据类型时赋值,也可以在之后的代码中赋值。但只能赋值一次

final修饰基本变量和引用变量区别:

修饰基本类型变量:基本类型变量赋值后不能重新赋值,因此基本类型变量不能够改变。
修饰引用类型变量:引用类型变量,他保存的仅仅是一个引用,final只保证这个引用类型变量所引用的地址不会改变,即一直引用同一个对象,但这个对象完全可以发生变化

修饰引用类型变量范例:
在这里插入图片描述final修饰的引用类型的变量不能重新赋值,但是可以修改引用对象的值。
在这里插入图片描述

可执行宏替换的final变量
对一个final修饰的变量来说,不管他是类变量、实例变量、还是局部变量,只要满足三个条件就不再是一个变量,而是一个直接量,即常量。
1. 使用final修饰
2. 在定义final时制定了初始值
3. 该初始值在编译时就被确定下来,不能更改
在这里插入图片描述定义了一个初始值为4的final局部变量。对于这个程序来说,变量a其实根本不存在,
当程序执行System.out.println(a);时,相当于执行System.out.println(4)
如果被赋的表达式只是基本的算术表达式或字符串链接运算,没有访问普通变量,调用方法,Java编译器同样会将这种final变量当成“宏变量”处理。

在这里插入图片描述

a、b、str、book在编译时都可以确定,所以都是宏变量
程序最后两行代码分别判断book、book2和“疯狂Java讲义:99.0”是否相等。由于book是一个“宏变量”,它将被直接替换成“疯狂Java讲义:99.0",因此 book和“疯狂Java 讲义:99.0”相等,但book2和该字符串不相等。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值