美文网首页
final关键字

final关键字

作者: 放开好人 | 来源:发表于2020-11-03 22:43 被阅读0次

    本文为了梳理JAVA基础而整理,大部分都借鉴于csdn一位大神,下附地址,若侵权请致邮箱fangkai1011@163.com

    https://blog.csdn.net/topdeveloperr/article/details/81414318


    final是java的一个关键字,他可以用于修饰类,方法,变量。此关键字的作用在于表明它所修饰的内容是不可改变的。

    1、修饰变量

    • final修饰的变量不能进行更改。
    • 若static与final一起修饰的常量,会占据一段不能改变的内存空间。一般用来记录系统启动时的常量值。规则如下

    private static final int TEST_FINAL = 1;

    • 修饰引用变量时可变(指的其引用不变,但引用的对象的内容是可变的),基本变量不可变(意味着这个基本类型的值不能改变,包括String),具体可以了解值传递与引用传递。
            final StringBuffer aa = new StringBuffer("123");//引用变量
            System.out.println(aa);//输出123
            aa.append("234");
            System.out.println(aa);//输出123234
            final String bb = "abc";//基本变量
            bb = "bcd";//编译不通过
    
    • final成员变量赋值,一是定义即赋值,且无法更改。二是定义不赋值,构造方法赋值。
    • final修饰类变量时,新建类对象及类方法都不可进行变更操作。
    • final修饰方法变量时,方法内只能进行一次赋值,且无法进行更改。但每个新建对象中的变量值互不影响。

    2、修饰方法

    • 可以被子类继承,但不能被重写。若继承后子类中有父类中重复的final方法名,则编译不通过。
    • 一般对一个方法加上final关键字作为修饰,代表这个方法你认为不需要再重写和修改,而是想要确保在继承中方法的行为保持不变。
    • 在过去,建议使用final 方法的另一个原因在于效率,final方法是在程序编译的时候就静态绑定了,但是在如今的jvm中这个速度已经可以忽略不计了。并且,也不再建议出于效率目的使用final。
    • 此外,一个类中所有的private方法都是隐式的被指定为final 的。因此对private方法添加final关键字没有任何意义。private方法不能被取用,因此也无法覆盖。
    • 继承后可以直接使用。
    class ParentOne{
        public final void print(){
            System.out.println("我是final父类方法");
        }
    }
    class ChilrenOne extends ParentOne{
        public void printOne(){
            System.out.println("我是子类");
        }
    }
    public class TestFinal {
        public static void main(String[] args) {
            ChilrenOne children = new ChilrenOne();
            children.print();
            children.printOne();
        }
    }
    

    3、修饰类

    • 修饰类不能被继承。
    • final修饰类可以继承其他类。

    class Parent {}
    final class Person extends Parent{} //可以继承Parent类
    class Child extends Person{} //不能继承Person类

    相关文章

      网友评论

          本文标题:final关键字

          本文链接:https://www.haomeiwen.com/subject/xszivktx.html