zoukankan      html  css  js  c++  java
  • final修饰符的三种使用场景

    final有三种使用场景,各自是修饰变量、方法和类。不管哪种修饰。一旦声明为final类型。你将不能改变这个引用了,编译器会检查代码,假设你试图再次初始化,编译器会报错。以下我来详细说说每一种修饰场景。


    1、修饰变量
    当final修饰一个变量的时候一般把他作为常量。通常和statickeyword配合使用。

    比如:
    private static final String ISSUCCESS_FLAG = “true”;一般static修饰的常量都用大写字母来表示。
    在这里我写一段代码:

    String str1 = "12";
    final String str2 = "1";
    String str3= "1";
    boolean a=(str1==(str2+"2"));
    boolean b=(str1==(str3+"2"));

    这里a和b的值各自是什么?
    显然a=true,b=false
    此时str2+”2”事实上就是”1”+”2”操作的是常量之间的连接操作,而str3+”2”事实上是new String(“12”);他和str1是两个对象。内存地址不同
    2、修饰方法
    当一个方法被final修饰后。表示该方法不能被子类重写。final方法有一个优点是比非final方法要快,由于在编译时已经静态绑定了,不须要在执行时在动态绑定。


    3、修饰类
    当一个类被final修饰后,表示该类是完整的,不能被继承。比如Java中String、Integer类都是final类
    final修饰的优点

    • finalkeyword提高了性能。

      JVM和Java应用都会缓存final变量。

    • final变量能够安全的在多线程环境下进行共享。而不须要额外的同步开销。
    • 使用finalkeyword,JVM会对方法、变量及类进行优化。
    • 不可变类创建不可变类要使用finalkeyword。不可变类是指它的对象一旦被创建了就不能被更改了。String是不可变类的代表。

      不可变类有非常多优点。譬如它们的对象是仅仅读的,能够在多线程环境下安全的共享,不用额外的同步开销等等。

  • 相关阅读:
    Golang 数组
    Golang 定时任务库使用
    Golang 选项设计模式
    使用阿里云构建海外docker镜像
    大数相加算法实现
    递归思想和迭代思想
    阶乘函数(factorial)——结果在整型范围内的阶乘计算
    最大公约数和最小公倍数(Greatest Common Divisor and Least Common Multiple)
    日结(2018年12月23日)
    日结(2018年12月22日)
  • 原文地址:https://www.cnblogs.com/cynchanpin/p/7260623.html
Copyright © 2011-2022 走看看