【JavaSE基础】小看final关键字?教你如何深入理解和使用(上)

简介: 【JavaSE基础】小看final关键字?教你如何深入理解和使用

⭐️小剧场⭐️


👻:下面有关java final的基本规则,描述错误的是?


       A. final修饰的类不能被继承


       B.final修饰的成员变量只允许赋值一次,且只能在类方法赋值


       C.final修饰的局部变量即为常量,只能赋值一次。


       D.final修饰的方法不允许被子类覆盖


         这是final最基础的问答题,如果想不明白原因建议往下看,干货满满。(可直接拉到最后查看答案)


🌲1.什么是final?


       final是Java的一个基础关键字,它可以用来修饰类和方法以及变量。它的效果有点类似于C语言中的const。很多人想到final仅仅就觉得是加在变量前面不可变而已,没有深入理解final这个关键字存在的意义和注意事项。下面我讲分析它在变量、方法、类三处使用的作用。


🌲1.final修饰变量


       🌰 1.final变量指向常用数据类型  

          我们都知道final修饰变量会有不可变性,但变量也分很多种,对于什么是不可变性我们也暂借不提,我们先来看看final来修饰成员变量以及局部变量但不对它们赋值的情况  


image.png


    ☀️:我们发现成员变量a和d在声明时,未赋值的话会报错,会告诉你未在构造器中初始化。但局部变量b和c却没有报错,所以我们可以先记住:final修饰成员变量时必须赋值,而局部变量可以暂且不赋值。


🌰2.什么是final的不可变性?


       说到不可变性,很多人肯定先想到String。但它和String的不可变性是有区别的(final和String可以搭配使用哦,下文会讲)。我们仍然用代码来演示


image.png


      这里我们用局部变量来演示,final变量的b命名时我们并未赋值,它没有报错,然后我们给它赋值20,它也没有报错,当我们再次给它赋值时,我们发现它报错了。我们再看看另外一种情况:


image.png


     左边当我们在未给b赋值时,直接使用b进行输出时,我们发现编译器报错了。但当我们给它赋值以后,编译可以正常调用b。通过上面的例子,我们可以得到结论:


     ✌️:final修饰的变量(无论成员变量还是局部变量),在使用前必须进行赋值,而且仅且只能赋值1次。如果多次赋值或者未赋值进行使用时,编译器将会提示错误。


    上面是我们宏观的理解,我们通过内存的角度来分析final的不可变性:


image.png


    我们列举出一个成员变量a和一个局部变量b。这里是为了顺便给大家讲下他们在内存的区别。当我们实例化类Test7时,有了一个引用变量a和一个值100(成员变量的值存在堆内存中)。a保存了100的地址,也就是指向了100。局部变量b被初始化后产生了一个a和10(局部变量的值在栈中),b指向了10。当我们尝试让a指向12和b指向200时,也就是要改变a和b的地址时,发现报错了。由此我们可以得知:


    ✌️:final的不可变性,指的是引用不可修改。我们都知道变量本身存储的是一个地方的地址,也就是这个地址不能修改,你指向了一个地方,那你这辈子都不能再指向别的地方了,这就是不可变性的意思。(但是被指向的地址里的内容是可以修改的,一定要记住!!!,和String的不可变性的不同,后续讲解)


相关文章
|
物联网 5G 网络安全
什么是5G技术及其主要目标?
什么是5G技术及其主要目标?
526 0
|
9月前
|
人工智能 自动驾驶 数据安全/隐私保护
《人工智能新质生产力:GDP增长的未来引擎,究竟能贡献多少?》
在科技飞速发展的时代,人工智能作为新质生产力的代表,正以前所未有的态势推动全球经济格局变革。据普华永道预测,到2030年AI将带动全球GDP增长14%,相当于15.7万亿美元。在中国,过去三年AI核心产业增速显著,2023年规模达5784亿元,预计2030年超过1万亿元,带动相关产业超10万亿元。AI通过产业升级、消费升级、投资和出口等方面大幅提升生产效率,创造新的经济增长点,尽管存在技术和社会政策的不确定性,但其对GDP的贡献率有望持续提升,为全球经济带来新机遇。
595 5
《人工智能新质生产力:GDP增长的未来引擎,究竟能贡献多少?》
|
9月前
|
人工智能 前端开发 关系型数据库
过年了,用魔搭+魔笔打造您的 AI 春节贺卡生成器!
本文介绍了如何获取和利用现有的大模型资源,结合魔笔低代码,低成本、高效率地打造一个 AI 春节贺卡生成器。
|
11月前
|
人工智能 搜索推荐 安全
AI技术在医疗领域的应用与挑战
【10月更文挑战第27天】 本文探讨了人工智能(AI)在医疗领域的应用,包括疾病诊断、药物研发和患者管理等方面。同时,也分析了AI在医疗领域面临的挑战,如数据隐私、伦理问题和技术局限性等。通过对这些方面的深入分析,我们可以更好地理解AI在医疗领域的潜力和发展方向。
423 59
|
9月前
|
开发框架 运维 安全
无影云电脑,畅享极速渲染新体验
本文介绍了渲染行业面临的挑战及无影云电脑带来的革新。传统渲染依赖高性能本地设备,面临重投入、性能固定、灵活性差和数据安全问题。无影云电脑通过云端算力,实现了灵活扩展、任意终端接入及按需付费,大幅提升了渲染效率与体验,尤其在游戏设计、工业制造等领域表现突出。其核心技术确保了色彩还原、流畅操作及外设兼容性,满足专业设计师的需求。未来,无影将助力渲染行业实现更高效、安全的云端工作模式。
|
11月前
|
机器学习/深度学习 存储 人工智能
人工智能的伦理困境与挑战
在本文中,我们将探讨人工智能技术的快速发展所带来的一系列伦理问题和挑战。随着AI技术的不断进步和应用范围的扩大,如何确保其发展符合道德标准、保护个人隐私以及避免潜在的社会不公成为了亟待解决的问题。本文旨在通过分析当前AI领域面临的主要伦理困境,并提出可能的解决方案或缓解措施,以促进更加负责任地使用和发展人工智能技术。
1033 1
|
11月前
|
人工智能 自然语言处理 语音技术
利用Python进行自然语言处理(NLP)
利用Python进行自然语言处理(NLP)
156 1
|
XML 前端开发 Java
谷粒商城笔记+踩坑(5)——商品服务-属性分组、品牌关联分类,spu+sku+分页拦截器
SPU和SKU、属性分组的增删改查、QueryWrapper的and和or用法、获取当前品牌关联的所有分类
谷粒商城笔记+踩坑(5)——商品服务-属性分组、品牌关联分类,spu+sku+分页拦截器
|
12月前
|
消息中间件 监控 Kafka
Apache Kafka 成为实时数据流处理的关键组件
【10月更文挑战第8天】随着大数据技术的发展,Apache Kafka 成为实时数据流处理的关键组件。Kafka Manager 提供了一个简洁易用的 Web 界面,方便管理和监控 Kafka 集群。本文详细介绍了 Kafka Manager 的部署步骤和基本使用方法,包括配置文件修改、启动服务、创建和管理 Topic 等操作,帮助你快速上手。
144 3
|
12月前
|
算法 安全 5G