深入理解Java中的final关键字
来源:互联网 发布:python urllib介绍 编辑:程序博客网 时间:2024/06/03 13:21
一 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;}@Overridepublic 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会对方法、变量及类进行优化。
0 0
- 深入理解Java中的final关键字
- 深入理解Java中的final关键字
- 深入理解Java中的final关键字
- 深入理解Java中的final关键字
- 深入理解Java中的final关键字
- 深入理解Java中的final关键字
- 深入理解Java中的final关键字
- 深入理解Java中的final关键字
- 深入理解Java中的final关键字
- 深入理解Java中的final关键字
- 深入理解Java中的final关键字
- 深入理解Java中的final关键字
- 深入理解Java中的final关键字
- 深入理解Java中的final关键字
- 深入理解Java中的final关键字
- 深入理解Java中的final关键字
- 深入理解Java中的final关键字
- 深入理解Java中的final关键字
- 数组之找出Array中重复次数最多的数
- Qt5下实现摄像头预览及捕获图像方法实例
- Xcode自定义代码块
- HDFS 挂载目录及重做方式
- 台阶问题:斐波那契数列的扩展问题研究
- 深入理解Java中的final关键字
- hadoop学习笔记--4.Ubuntu下Eclipse+hadoop开发配置
- Android MediaCodec类
- 10. Hibernate_详解 Hibernate 映射文件(2)
- PHP5.6.15连接Sql Server 2008配置方案
- 源码时代——最新开班计划
- linux上的Tomcat 8 的远端debug调试
- Android RIL架构分析——(1)本地库实现[c/cpp部分]
- linux memalign()