<>四种用法:

① 修饰一个类
② 修饰一个方法
③ 修饰一个局部变量
④ 修饰一个成员变量

<>1、修饰一个类
public final class 类名称 { ... }
作用:被final修饰的类不可以被继承,进而其所有的方法都无法被重写。

<>2、修饰一个成员变量
class Person { // final int height; [0]报错,必须赋初值 // 声明为final的成员变量必须赋初值(两种方式) //
方法一:声明时直接赋值;[1] // final int height = 180; // 方法二: 构造器赋值;[2] final int height;
Person(int height) { this.height = height; } }
作用:被final修饰的成员变量一旦被赋值便不可被改变
- 对于基本数据类型:变量的值不可变
- 对于引用类型:变量的地址不可变
说明:
1、被声明为final的成员变量必须被赋初值,否则报错,如[0]处;
2、有两种对成员变量进行赋初值的方式,且这两种方式只能存在一个;
方式1:在声明时直接赋值,如[1]处
方式2:在有参构造器中赋值,如[2]处

<>3、修饰一个方法
修饰符 final 返回值类型 方法名称(参数列表) { 方法体 }
作用:该方法不能被重写

<>4、修饰一个局部变量
void setAge (int a) { final int dadAge;// [1] // dadAge = 1;// [2] final int
age= a; // age += 1; // [3] 报错 System.out.println(age); //
System.out.println(dadAge); // [4] 报错 }
当final关键字修饰一个局部变量时,该变量同样不可变。
注意:
[1] 可以不赋初值,编译器不会报错
[2] 也可以赋初值
[3] 报错,一旦被赋初值,便不可以被修改
[4] 报错,未赋初值不可直接被使用
补充说明:局部变量不可变意味着,在当前执行该方法时,被final修饰的局部变量一旦被赋初值后便不可改变;但是方法结束后,局部变量即被销毁。

<>总结

简单的说:
(1) 作用于类时,类不可被继承;
(2)作用于方法时,方法不可被重写;
(3) 作用于变量时,在该变量的生命周期内,一旦被赋初值后便不可被修改。
推论:
(1)abstract与final是天然的矛盾,因为抽象类就是需要被继承的,抽象方法就是需要被重写的,所以两个关键词不可同时使用;

(2)private与final关键字同时修饰方法时,IDEA会提示移除final关键字,因为private的可见性是当前类,所以天然就不可被子类重写,所以在修饰方法的层面上,private包含了final关键字的作用。

技术
下载桌面版
GitHub
Gitee
SourceForge
百度网盘(提取码:draw)
云服务器优惠
华为云优惠券
腾讯云优惠券
阿里云优惠券
Vultr优惠券
站点信息
问题反馈
邮箱:[email protected]
吐槽一下
QQ群:766591547
关注微信