美文网首页程序员Java底层原理初探
02.Java关键字与底层原理-final关键字

02.Java关键字与底层原理-final关键字

作者: Next_吴思成 | 来源:发表于2018-08-29 22:05 被阅读201次

    1. 含义

    final关键字,实际的含义就一句话,不可改变。什么是不可改变?就是初始化完成之后就不能再做任何的修改,修饰成员变量的时候,成员变量变成一个常数;修饰方法的时候,方法不允许被重写;修饰类的时候,类不允许被继承;修饰参数列表的时候,入参的对象也是不可以改变。这个就是不可变,无论是引用新的对象,重写还是继承,都是改变的方法,而final就是把这个变更的路给堵死。

    2. 用法与底层原理

    2.1.final修饰成员变量

    public final String finalVal = "finalVal";
    finalVal = "changeValue";// 不允许,不能被修改
    

    2.2.final修饰方法

    public final void finalMethod() {
        System.out.println("finalMathod");
    }
    // 不允许,不能被重写
    @Override
    public void finalMehod() {}
    

    2.3.final修饰参数列表

    public void finalMethod2(final String name) {
        //name = "wusicheng";//error 不能修改
        System.out.println("hello " + name);
    }
    

    2.4.final修饰类

    final class FinalClass {
    }
    // 不允许,不能被继承
    class ChildClass extends FinalClass{}
    

    3. 实际应用

    一般使用都是用在定义常量,与static搭配进行使用。

    4. 总结

    1. final关键字的精髓是不可变,不可变的常量、不能重写的方法、不能被继承的类、不能被修改的入参;
    2. final关键字修饰变量的时候,变量的地址不可变,但是变量地址的内容是可变的;
    3. Thinking in Java里面,描述使用final的两种情况是为了设计与效率,换言之就是为了保证这些东西不可变,同时将相关的变量放到常量池当中,相关的方法做内联的优化等等,由于这个实在是太底层了,在这里省略。

    5.吐槽

    我要填的坑那么的多。

    https://www.jianshu.com/p/f1516e1217f1

    相关文章

      网友评论

      • 黄云斌huangyunbin:Final其实是可以改的,你用反射就可以改了。final只是在编译期,jvm是没有final的
        Next_吴思成:@黄云斌huangyunbin 谢谢指导,标题涉及到底层,但是发现自己的知识面还没有到达底层,有种挂羊头卖狗肉的感觉了,不知道的还有很多,我会去看相关的东西,然后把这一块给补上,谢了

      本文标题:02.Java关键字与底层原理-final关键字

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