码农知识堂 - 1000bd
Python
PHP
JS/TS
JAVA
C/C++
C#
GO
Kotlin
Swift
final关键字
什么是不变性(Immutable)
如果对象在被创建后,状态就不能被改变,那它就是不可变的
final的作用
类防止被继承、方法防止被重写、变量防止被修改
天生是线程安全的,不需要额外的同步开销
3中用法:修饰变量、方法、类
变量:被final修饰的变量值不能被修改。如果变量是对象,那么对象的引用不能变化,但是对象自身的内容依然可以变化。
赋值时机
类中的final属性:在声明变量的等号右边直接赋值;在构造函数中赋值;在静态代码块中赋值;必须选一种赋值方式。
类中的static final属性:在声明变量的等好的右边直接赋值;静态代码块中赋值;必须赋值。
方法中的final变量:不规定赋值时机,只要求在使用前必须赋值。
为什么要规定赋值时机:如果初始化不赋值,后续赋值,就是从null变成你赋的值,这就违反final不变的原则了
方法
构造方法不允许final修饰
不可被重写,也就是不能被override,即便是子类有同样名字的方法,那也不是override,这个和static方法是一个道理。
类
不能被继承:如String类。
注意点
final修饰对象的时候,只是对象的引用不可变,而对象本身的属性是可以变化的
final使用原则:良好的编程习惯,如果知道该变量一旦赋值就不会发生变化,那就在定义的时候就定义为final变量。
不变性和final的关系
不变性并不意味着简单地用final修饰就是不可变
对于基本数据类型,确实被final修饰后就具有不变性
但是对于对象类型,需要该对象保证自身被创建后,状态永远不会变才可以。
如何实现对象类型不可变
第一种
对象创建后,其状态就不能修改
所有属性都是final修饰的
对象创建过程中没有发生溢出
第二种
把变量写在线程内部——栈封闭
在方法里新建局部变量,实际上是存储在每个线程的私有的栈空间,而每个栈空间是不能被其他线程所访问到的,所以不会有线程安全问题。这就是著名的“栈封闭”技术。
相关阅读:
源码分析:规则引擎提交策略
Java新手小白入门篇 Java面向对象(八)
Java 流(Stream)、文件(File)和IO
Oracle物理体系结构
QT QJsonObject 插入 QByteArray十六进制数据
三款“非主流”日志查询分析产品初探
Causal Inference理论学习篇-Tree Based-Causal Tree
SpringBoot热部署
百度Comate代码助手全新上线SaaS服务-免费申请试用+深入教程解读
数说故事《汽车行业全场景数字化解决方案》之数字化营销平台搭建
原文地址:https://blog.csdn.net/Laoddaaa/article/details/126806421
最新文章
攻防演习之三天拿下官网站群
数据安全治理学习——前期安全规划和安全管理体系建设
企业安全 | 企业内一次钓鱼演练准备过程
内网渗透测试 | Kerberos协议及其部分攻击手法
0day的产生 | 不懂代码的"代码审计"
安装scrcpy-client模块av模块异常,环境问题解决方案
leetcode hot100【LeetCode 279. 完全平方数】java实现
OpenWrt下安装Mosquitto
AnatoMask论文汇总
【AI日记】24.11.01 LangChain、openai api和github copilot
热门文章
十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
奉劝各位学弟学妹们,该打造你的技术影响力了!
五年了,我在 CSDN 的两个一百万。
Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
面试官都震惊,你这网络基础可以啊!
你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
心情不好的时候,用 Python 画棵樱花树送给自己吧
通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
13 万字 C 语言从入门到精通保姆级教程2021 年版
10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系
2656653265@qq.com
京ICP备2022015340号-1
正则表达式工具
cron表达式工具
密码生成工具
京公网安备 11010502049817号