文章目录
- 定义
- 使用及规则
- 修饰类
- 修饰方法
- 修饰变量
- 修饰成员变量
- 修饰局部变量
- final与static共同修饰变量
- final修饰的变量和普通变量的区别
本篇文章代码就不附上了,建议大家实际敲一敲,更能加快理解
定义
- final表示”最后的,最终的“含义,变量一旦赋值后,不能被重新赋值(不然不符合最终的规则了)。
- 声明final方法的主要目的是防止该方法的内容被修改
- 被final修饰的实例变量必须显示指定初始值
- final修饰符通常和static修饰符一起使用来创建类变量
戳这里→回顾static关键字
使用及规则
修饰类
1、 被final修饰的类,不能被继承
2、 如果一个类被设置为final修饰,则该类中的所有方法默认为final方法
3、 因为final不能被继承(自然也不能重写),所以final不能和abstract(抽象关键字)并存
4、 final类中不允许有任何抽象方法(即方法被abstract修饰)
修饰方法
- 父类中的final方法可以被子类继承和访问(非private修饰),但是不可以被重写
戳这里→回顾java的重写和重载
修饰变量
-
1、final关键字可用于变量声明,一旦该变量被设定,就不可以再改变该变量的值:
(1)对于基本数据类型:final修饰的不可变指的是数值不可变
(2)对于引用数据类型:final修饰的不可变指的是保存的地址值不可变,但是对象的内容是可以改变的 -
2、通常由final定义的变量称为常量
-
3、final关键字定义的变量必须在声明的时候对其进行赋值操作(成员变量和局部变量有差别)
修饰成员变量
说明:出现编译错误,是因为变量habit未进行初始化
- 方法一:在声明的时候直接赋值
- 方法二:使用构造方法进行赋值
需要注意的是,在构造方法中赋值后,这个类是不能生成setter方法的
- 方法三:在代码块中赋值
修饰局部变量
- 保证在使用之前被初始化就可以了
final与static共同修饰变量
- 被final和static共同修饰的变量,初始化方法有两种:
- 1、声明时即赋值(与上边相同)
- 2、在静态代码块中初始化(注意与非静态变量的区分)
final修饰的变量和普通变量的区别
- finla变量和普通变量的优化:
- 1、当final变量是基本数据类型及String类型时,如果在编译期间能知道它的确切值,编译器会把它当做编译器常量使用
(如str、b0),当用到该final变量时,相当于直接访问的是这个常量(即它的值),不需要在运行时确认。
- 2、普通变量,在用到时,依然需要链接去访问
- 1、当final变量是基本数据类型及String类型时,如果在编译期间能知道它的确切值,编译器会把它当做编译器常量使用