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是不可变类的代表。

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

最新文章

  1. [LeetCode] Longest Consecutive Sequence 求最长连续序列
  2. 关于ArcGIS API for JavaScript中basemap的总结介绍(一)
  3. Hadoop快速入门
  4. BZOJ 1053 & 反素数
  5. linux和window下mkdir函数问题(转-锦曦月)
  6. 【BZOJ】3196: Tyvj 1730 二逼平衡树(区间第k小+树套树)
  7. bash: sqlplus: command not found 解决方法
  8. Docker三十分钟快速入门(上)
  9. Java中Excel表格的上传与下载
  10. 隐藏软键盘(解决自定义Dialog中无法隐藏的问题)
  11. 时钟信号的占空比调整——Verilog
  12. JavaWeb学习日记----XML基础
  13. 【转】WPF自定义控件与样式(11)-等待/忙/正在加载状态-控件实现
  14. Chart控件的用法
  15. win10 实现 iPad AVplayer 搭建 ftp 共享 PC 端
  16. Solr的搭建
  17. python3 IEDriver抓取时报数据
  18. iOS 里RGB 配色 UIColor colorWithRed
  19. SpringMVC源码阅读:异常解析器
  20. WannaCry应急排查思路

热门文章

  1. POJ 1062 昂贵的聘礼 (最短路 迪杰斯特拉 )
  2. asp单页面301跳转
  3. ssh 免密码登录【用】
  4. ios网络开发 网络状态检查
  5. HDU1142 (Dijkstra+记忆化搜索)
  6. (十一)__LINE__、__FUNCTION__的使用
  7. Bean利用Resource接口获取资源的几种方式
  8. mybatis插入值的时候返回对象的主键值
  9. Unicode(UTF-8, UTF-16)令人混淆的概念----我看完了 不错
  10. python2.7.12自带pip吗?