多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

final 关键字

final 关键字 一、final 关键字概述final是最终、不可改变的意思可以用来修饰类、方法、变量。 被 final 修饰之后内容就不能被修改不同修饰对象效果完全不同。二、final 修饰类1. 核心规则final 修饰的类叫最终类不能被继承没有子类但是它可以去继承别的父类。底层原理为了防止类的功能被子类篡改Java 中很多源码类都是 final 类比如String、Integer。2. 语法格式// final修饰类该类无法被继承 final class Animal{ } // 下面这行代码编译报错final类不能被继承 // class Dog extends Animal{}重点阐释final 类里面所有的方法会隐式全部带上 final 效果但是成员变量不受 final 影响可以正常修改。三、final 修饰方法1. 核心规则final 修饰的方法叫最终方法该方法可以被继承但是不能被子类重写。使用场景如果某个方法逻辑不希望子类覆盖改写就加上 final。2. 代码示例class Person{ // final修饰方法可以被子类调用但是不能重写 public final void sleep(){ System.out.println(人需要睡觉); } } class Student extends Person{ // 编译报错父类final方法不允许重写 /* Override public void sleep() { System.out.println(学生睡觉); } */ } public class TestFinalMethod{ public static void main(String[] args) { Student s new Student(); s.sleep(); // 子类可以直接继承调用父类final方法 } }注意final 和 private 区别private私有方法子类看不见本质不能重写final方法子类可以继承调用禁止重写。四、final 修饰变量变量被 final 修饰就变成常量只能赋值一次赋值完成后不能修改。注意变量分为局部变量、成员变量实例成员变量、静态成员变量规则有差异。1.final 修饰局部变量局部变量写在方法、代码块内部的变量。可以先声明后赋值只能赋值唯一一次一旦赋值不能再次修改。public class TestFinalVar{ public static void main(String[] args) { final int a; a 10; //第一次赋值允许 // a 20; //编译报错final局部变量不能二次修改 System.out.println(a); } }2.final 修饰实例成员变量普通成员变量属于对象实例成员变量属于对象必须保证对象创建完成前完成唯一一次赋值。 两种赋值时机二选一定义的时候直接赋值在构造方法中赋值❗不能在普通方法里面给 final 实例成员变量赋值。class Demo{ //方式1定义直接赋值 final int NUM1 100; final int NUM2; //方式2构造方法赋值对象创建时完成赋值 public Demo(){ NUM2 200; } }3.final 修饰静态成员变量static final静态常量staticfinal 共同修饰的变量称为静态常量。属于类直接类名。常量名访问赋值时机定义直接赋值 / 静态代码块赋值Java 开发规范静态常量名字全部大写下划线分隔。class Constants{ //静态常量规范大写 public static final int MAX_AGE 150; } public class Test{ public static void main(String[] args) { System.out.println(Constants.MAX_AGE); } }4.final 修饰引用类型变量重点易错⚠️非常容易踩坑 final 修饰引用变量引用地址不能变但是对象内部的属性可以修改。引用变量存的是对象地址final 保证地址不能重新指向别的对象对象里面的成员变量不受 final 限制可以修改。class User{ String name; public User(String name){ this.name name; } } public class TestFinalRef{ public static void main(String[] args) { //final修饰引用变量uu存储对象地址 final User u new User(小明); u.name 小红; //✅允许修改对象内部属性 System.out.println(u.name); // u new User(小李); //❌报错不能修改引用地址不能指向新对象 } }五、final 知识点总结表格修饰对象作用效果final 修饰类类不能被继承类中方法默认 final 效果final 修饰方法方法可以继承不能重写final 修饰局部变量只能赋值 1 次值不可更改final 修饰实例成员变量对象创建前完成唯一赋值不可修改static final 静态常量类加载阶段赋值全局常量名字大写final 修饰引用类型对象地址不可改变对象内部内容可以修改六、常见面试易错点final abstract能不能一起修饰类不能abstract 抽象类必须被继承final 禁止继承二者冲突。final abstract能不能修饰方法不能abstract 方法必须子类重写final 禁止重写。
返回列表