深入理解Java中的final关键字

    xiaoxiao2021-04-12  34

    一 final修饰变量

    客套话:

    Java中的final关键字非常重要,它可以应用于类、方法以及变量。这篇文章中我将带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使用final关键字的实例。final经常和static一起使用来声明常量,你也会看到final是如何改善应用性能的。

     

    工作里,final经常与static关键词一起使用:

    private final static Log log = LogFactory.getLog(MemcachedUtil.class); private static final int DEFAULT_LOCK_SECCONDS=5;

    下面讲一下其它用法:   

    package test.filnal; public class User { private String userName; private final String gender; //性别 /** * 构造函数 * @param userName * @param gender */ public User(String userName, String gender){ this.userName = userName; this.gender = gender; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getGender() { return gender; } @Override public String toString() { return "姓名:"+userName+", 性别:"+gender; } } 这里User类有两个属性,userName, gender字段,表示人的性别,人一出生,性别即确定(除非去泰国一次 ), 所以gender属性申明为final,即,gender初始化之后值不可修改

    我们发现User类里gender属性少一个set方法,如果加上该方法,会怎么样呢

    public void setGender(String gender) { this.gender = gender; } 直接编译报错了:

    二 final修饰方法

    final也可以声明方法。方法前面加上final关键字,代表这个方法不可以被子类的方法重写。如果你认为一个方法的功能已经足够完整了,子类中不需要改变的话,你可以声明此方法为final。final方法比非final方法要快,因为在编译的时候已经静态绑定了,不需要在运行时再动态绑定。下面是final方法的例子(Jdk里java.lang.Object类中的wait方法就有final关键字修饰):

    public final void wait(long timeout, int nanos) throws InterruptedException { if (timeout < 0) { throw new IllegalArgumentException("timeout value is negative"); } if (nanos < 0 || nanos > 999999) { throw new IllegalArgumentException( "nanosecond timeout value out of range"); } if (nanos >= 500000 || (nanos != 0 && timeout == 0)) { timeout++; } wait(timeout); }

    三 final修饰类

    使用final来修饰的类叫作final类。final类通常功能是完整的,它们不能被继承。Java中有许多类是final的,譬如String, Interger以及其他包装类。下面是final类的实例:

    public final class String{ ... }

    final关键字的好处

    下面总结了一些使用final关键字的好处

    final关键字提高了性能。JVM和Java应用都会缓存final变量。final变量可以安全的在多线程环境下进行共享,而不需要额外的同步开销。使用final关键字,JVM会对方法、变量及类进行优化。

    转载请注明原文地址: https://ju.6miu.com/read-667304.html

    最新回复(0)