前言
说到final,相信大家都不陌生,实际开发中也都用到过。本文将从final基本用法、多线程角度介绍final
final基本用法
final 字面意思是最终的,不可改变的。可以修饰类、方法、变量,下面将从这三个方面介绍
修饰类
将类定义为final时,说明这个类不允许被继承。
在实际开发如果不想被人继承扩展你的类可以定义成fianl的,常见有工具类和jdk里的一些类,如String、Byte、Boolean等等。
至于实际开发中是否有必要把类定义成final的,还是需要从全局的架构设计角度去思考
修饰方法
- 当一个方法被final关键字修饰时,说明此方法不能被子类重写
- 如果父类方法被private和final同时修饰,子类里的相同方法其实已经不是重写父类的方法了(也好理解因为private是父类私有的方法)
- private修饰的方法隐式地指定为final的
修饰变量
成员变量
成员变量分为类变量和实例变量,这两种类型的变量赋初值的时机是不同的
-
类变量:必须要在静态初始化块中指定初始值或者声明该类变量时指定初始值
-
实例变量:在非静态初始化块,声明该实例变量或者在构造器中指定初始值
局部变量
局部变量用final修饰,更容易理解,只能赋值一次
引用类型
基本类型我们都知道,一但赋值就不能改变,下面我们来看看引用类型是否适用
由此可见,final修饰引用类型,我们可以对引用类型里的属性进行修改,但引用类型的地址不可以改变
方法参数
修饰参数则代表了该参数是不可改变的