• Java——final关键字


    final是一个可以对类、方法、变量修饰的修饰词。它最直接的意思就是,被它修饰的元素,不可以再被改变了,已经是最终形态了

    1.当它用于修饰类的时候

      表示这个类不可以被继承了。这个类不可以有子类,已经是最终形态了。

      final类内部的所有的方法都隐式的被final修饰(反正已经不可能被重写了)

      内部的变量的话,按情况自己定吧。

    2.修饰方法的时候

      这个方法不可以被重写(也就是被子类覆盖,如果是private修饰的方法是被隐式指定为final的,因为,字类获取不到private方法,但是private变量可没有被隐式的final啊,分清。)

      对于private方法,这里提一下哈,子类是获取不到父类的任何用private关键字修饰的元素的。也就是说,你在子类中定义相同名字的方法和属性,都和父类的那个无关。也不存在重写的情况,那是你自己定义的,之前压根儿就没有。

    3.修饰变量

      表示这个变量是一个常量,只能被赋值一次。一次之后就不能更改了。

      被final休斯的成员变量可以在声明的时候直接初始化,也可以在所有的构造函数里初始化,。但是其它情况不行,而且,你必须在这两种里面选择一个,不能不选。(final修饰的成员变量必须显式初始化,就是解释这句话嘞)

    final修饰参数,和修饰变量一样。

    但是不能再给它赋值了,因为在函数调用的时候已经赋值过了。

    划重点啦:

    final string str = "kkk"

    string strs = str+"hhh"

    print(strs == str)

    伪代码啊,答案是true,因为。string strs = str + "hhh"等同于strs = "kkk" + "hhh",

    因为编译器优化了。而且有一点记住,如果在编译时期并不知道strs的真实值,上面的优化就不成立了,str会被认为一个引用类型

    其实上面的strs = “kkk”+"hhh"它还等通过strs = “kkkhhh”因为JVM在字符串之间使用+号的时候会优化。如果具有引用类型则不会这样优化了,掠过掠过,在之后的String讨论的时候再讨论这个问题。

    而我们上面说到的编译时期就知道的值是指的 final string str ="sss"

    final string str = getHellp()这种是运行时赋值

    这样我们可以得出一个结论,并不是所有的final修饰的变量都在编译时被赋值的。也可以通过方法的形式来运行时赋值。

    但是谨记一点,只能被赋值一次。

    被final修饰的值类型不可变,但是被final修饰的引用类型(也不可变)所指向的对象的状态可变。

    相信看过上篇值类型及引用类型的小伙伴能自己探索其中奥秘了。

  • 相关阅读:
    worker与redis网络中断后,worker不再接受任务的异常问题
    Pyecharts 绘制动态流线地图
    MySql存储过程知识了解
    Pyecharts配置项使用
    Pandas一个需求:存在一个列表,需要在一个DataFrame中取到以该列表为索引的数据
    mysql时间与字符串之间相互转换
    map + apply + applymap
    pandas——read_csv
    Python 原生协程------asyncio(选自公众号)
    一道记数题
  • 原文地址:https://www.cnblogs.com/mcmx/p/11331997.html
Copyright © 2020-2023  润新知