:final 篇)
续上一篇今天扒完 final 这个 “终极钉子户”家人们上一篇咱们唠了 abstract 和 static今天必须把 final 这个 “Java 倔驴” 给盘明白final 翻译过来是 “最终的、最后的”被它修饰的东西那就是 “钉死在墙上的钉子”谁都别想改主打一个 “油盐不进、死磕到底”。一、final 修饰变量只能赋值一次的 “一次性水杯”被 final 修饰的变量不管是局部变量、实例变量还是静态变量都变成了常量只能赋值一次赋值之后就再也改不了像一次性水杯用一次就不能再装别的东西了。1. final 修饰局部变量方法里的 “一次性水杯”方法里的局部变量被 final 修饰后只能赋值一次赋值之后就固定了。比如你在方法里写final int a 10;后面再写a 20;编译器直接给你报错说 “你这杯子用过了不能再装水了”。2. final 修饰实例变量类里的 “定制水杯”实例变量被 final 修饰后编译器不会给它默认值必须手动初始化而且只能赋值一次。初始化的时机有三种声明的时候直接赋值final int a 10;就像定制水杯出厂就印好了图案改不了。在构造方法里赋值每个构造方法都得给它赋值不然编译器会说 “你这水杯没印图案没法用”。借助动态代码块赋值{ a 10; }在类加载的时候给它赋值也是一次性的。3. final 修饰静态变量全类共用的 “公共水杯”静态变量被 final 修饰后就是全类共用的常量初始化时机有两种声明的时候直接赋值static final int PI 3.14;比如咱们常用的圆周率就是这种常量全类共用谁都不能改。借助静态代码块赋值static { PI 3.14; }类加载的时候给它赋值之后就固定了。重点提醒final 修饰的引用地址不能改比如你写final Student s new Student();这个s引用里存的是对象的地址被 final 修饰后这个地址就不能改了你不能再让s指向另一个 Student 对象。但注意对象里的属性是可以改的就像你买了个带图案的水杯水杯的地址位置不能变但你可以往里面装不同的水对象的属性就是 “水杯里的水”可以随便改。二、final 修饰方法只能被继承、不能被重写的 “祖传秘方”被 final 修饰的方法就像老祖宗传下来的秘方子类可以继承但绝对不能改配方语法public final void method() {}方法前面加个 final子类继承后不能重写这个方法只能直接用。为啥要这么做就是怕子类乱改父类的核心逻辑比如 Java 里的一些工具类方法都是 final 的防止子类重写搞出 bug。三、final 修饰类不能被继承的 “绝户类”被 final 修饰的类就是 Java 里的 “绝户类”没有子类谁都不能继承它语法final class 类名 {}加了 final 之后这个类就断了传承只能自己用不能被继承。咱们常用的String、System、Math类都是 final 类为啥因为这些类是 Java 的核心类要是被随便继承修改整个程序都可能出问题所以直接用 final 锁死不让别人改。四、三大修饰符总结三个 “性格迥异” 的工具人好了家人们Java 这三个修饰符的套路全给你扒完了抽象的、共享的、倔驴的各有各的用处再也不用写代码的时候被它们搞心态了要是还有啥没看懂的地方评论区唠唠我给你掰开揉碎了讲明白