试听热线:
  029-62258374
网站首页 JavaEE全栈工程师 WEB前端工程师 专家师资 就业案例 常见问题 视频下载 报名流程 关于我们
当前栏目
常见问题
最新文章
西安尚学堂2019年09月第
西安尚学堂2019年08月第
西安尚学堂2019年08月第
Java和Python谁更有
西安尚学堂2019年08月第
西安尚学堂2019年07月第
Java面试如何描述自己的项
西安尚学堂2019年07月第
2019年Java语言发展趋
西安尚学堂2019年07月第
热门信息
尚学堂学费是多少?
尚学堂PK同类java培训机
IT培训为什么选择尚学堂
尚学堂四大保障为您保驾护航
孙*,毕业于陕西能源职业技术
您当前的位置:首页>> java培训教程
西安尚学堂Java知识final关键字的作用
作者:管理员    来源:尚学堂   发布时间:2017-11-06 15:59:16  阅读:438次

2e938f642d448de1c8ec652596330dd7.png


相信对于final的用法,大多数人都可以随口说出三句话:

1、被final修饰的类不可以被继承

2、被final修饰的方法不可以被重写

3、被final修饰的变量不可以被改变

重点就是第三句。被final修饰的变量不可以被改变,什么不可以被改变呢,是变量的引用?还是变量里面的内容?还是两者都不可以被改变?写个例子看一下就知道了:





运行一下,一点问题都没有。稍微修改一下呢:



报错了,“The final local variable fs cannot be assigned”。可见,被final修饰不可变的是变量的引用,而不是引用指向的内容,引用指向的内容是可以改变的。OK,那final修饰数组呢?



同样是引用之间报错了“The final local variable strs1 cannot be assigned”。变量和数组一样,都是引用不可变,引用指向的内容可变。实际上如果用过FindBugs插件的应该知道,假如代码里面用final修饰了一个数组,那么改行代码会被作为findBugs的一个bug被查找出来,因为“用final修饰数组是没有意义的”。


接下来,再看一下用final修饰方法参数的场景:



总结

“引用”是Java中非常重要的一个概念,对于引用的理解不深,很容易犯一些自己都没有意识到的错误。被final修饰的变量,不管变量是在是哪种变量,切记不可变的是变量的引用而非引用指向对象的内容。另外,本文中关于final的作用还有两点没有讲到:

1、被final修饰的方法,JVM会尝试为之寻求内联,这对于提升Java的效率是非常重要的。因此,假如能确定方法不会被继承,那么尽量将方法定义为final的。

2、被final修饰的常量,在编译阶段会存入调用类的常量池中。


尚学堂微信公众号3.png

 
网站首页 | 专家师资 | 常见问题 | 就业案例 | 报名流程 | 联系我们
尚学堂    西安Java培训     Android培训    Java培训教程    Android培训教程    尚学堂怎么样    尚学堂学费    尚学堂视频下载
Copyright 2007 版权所有 西安雁塔尚学堂计算机学校
地址:陕西省西安市高新区科技二路西安软件园天泽大厦五楼 邮编710000 电子邮件:fanchangansxt@163.com
陕ICP备14007859号 咨询电话:029-62258374
在线咨询