• JavaSE-关键字final


    final修饰数据:

      final修饰基本数据类型,使数值恒定不变,修饰对象引用,final使引用恒定不变

      final修饰的成员变量必须要被初识化

      final可以修饰方法中的参数列表,被修饰的参数无法在方法中更改参数引用所指向的对象

      final和static修饰的成员变量表示常量

    final修饰方法:

      final修饰方法的原因有两个,一是把方法锁定,以防任何继承类修改它的含义,确保在继承中使方法行为保持不变,

      并且不会被覆盖;另一原因是效率。在早期java实现中,如果将方法指明为final,就是同意编译器将针对该方法的

      所有调用都转为内嵌调用。现在的java虚拟机会自动探测到这种情况,不需要通过final修饰方法而提高效率。

      类中所有的private方法都隐式的指定为是final的。

    final修饰类:

      类被final修饰,表明该类不能被继承(String就是final的)

    final的内存语意:

      final域的重排序规则:

        对于final域,编译器和处理器要遵守两个重排序规则

        (1) 在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序。

        (2)初次读一个包含final域的对象的引用,与随后初次读这个final域,这两个操作之间不能重排序。

      写final域的重排序规则:

        写final域的重排序规则禁止把final域的写重排序到构造函数之外。这个规则包含两个方面:

        (1)JMM禁止编译器把final域的写重排序到构造函数之外。

        (2)编译器会在final域的写之后,构造函数returen之前,插入一个StoreStore屏障。这个屏障禁止处理器把final域的写重排序

         到构造函数之外。

      读final域的重排序规则:

        读final域的重排序规则是,在一个线程中,初次读对象引用与初次读该对象包含的final域,JMM禁止处理器重排序这两个操作

        (这个规则仅针对处理器)。编译器会在读final域操作的前面插入一个LoadLoad屏障。

      final域为引用类型:

        上面讲到的都是基础数据类型,那么对于引用类型是怎样的呢?对于引用类型,写final域的重排序规则对编译器和处理器增加

        了如下约束:在构造函数内对一个final引用的对象的成员域的写入,与随后在构造函数外吧这个被构造对象的引用赋值给一个

        引用变量,这两个操作之间不能重排序。

  • 相关阅读:
    sql server 2008 express 安装的时提示“重启计算机失败"
    100个MySQL 的调节和优化的提示
    C#访问MySQL数据库的方法
    应用程序默认安装在C盘后启动时提示权限不足想起的。。。
    Visual Studio开发工具升级注意事项
    WPF:理解ContentControl——动态添加控件和查找控件
    django报错:django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3.
    不错的后台模板
    allure官方文档
    Python requests.post方法中data与json参数区别
  • 原文地址:https://www.cnblogs.com/happyflyingpig/p/9950283.html
Copyright © 2020-2023  润新知