final 到底有啥用,99% 的开发者可能只知道一半!

简介: 本场主题主要是了解final的各项功能,并且在面试中如何能够自信回答面试官询问final的用途。内容主要为以下五部分。1.自我经历2.final修饰变量3.final修饰类4.final的实际应用场景5.面试问答汇总

自我经历

 

在早晨面试官询问final在java中有什么作用时,我当时脑子一片空白,只能挤出一句,弄完修饰变量吧。看着面试官点了点头,但眉头却微微一皱,我就知道完了。

今天咱们就从头到尾搞清楚final的所有用途。当你下次遇到这个。问题自信到能现场开课,什么是final,简单来说,final是java中的一个关键字,表示不可变性,它可以用来修饰变量、方法和类,每种情况下都有不同的作用,让我们逐一拆解,看看final的真面目吧。

 

final修饰变量 

修饰基本数据类型

场景:你写了一段代码,定义了一些常量,比如圆周率π,这样PI的局就再也不能被修改。如果你尝试重新赋值,这就是final的威力保证了数据的不可变性。常量用法在开发中很常见,特别是那些一旦设定就不会变的值,比如配置信息,数学常量等。

 

修饰引用数据类型

场景修饰一个对象引用并用发动修饰引用类型时,对象的引用不可变,但对象本身可以变,虽然听起来有点绕,但是记住此例子list这个引用永远指向同一个对象,但这个对象里的内容是可以修改的。

 

final修饰方法

场景:你写了一个方法,特别想确保此类不能随便修改它的逻辑。为什么用final修饰方法,安全性:一些方法可能对类的核心功能至关重要,比如加密算法的实现重写可能导致安全问题。

 

性能优化

JVM可以对final方法进行优化,比如内联调用减少方法调用的开销。final修饰类,场景:你写了一个类,希望它的设计在任何情况下都保持不变。用final修饰类时,它就不能被继承了。

 

final修饰类 

为什么用final修饰类,确保类的不可变性。比如Java中的String类,就是final的,防止继承后破坏它的特性。

设计意图:有些类是为了提供工具方法的。比如java,lang,Math没有必要让别人继承,和static、abstract一起用的特殊情况。

 

final和static:

如果一个变量计时final又是static,它就成为了全局常量。这种写法常用在定义配置上,比如MAX_VALUE,整个应用程序都可以直接使用。

 

final和abstract:

你可能会问多项方法可以用发弄修饰吗,答案是不能。抽象方法要求子类必须重写,而final则不允许重写,这两者是互斥的。

 

final的实际应用场景 

看完理论知识,咱们来聊聊实际开发中final的常见用途,

 

定义常量:

比如某个系统的日志级别配置。

 

实现不可变类:

Java中的String类就是最经典的例子,不可变类在多线程环境下,特别有用,避免了修改带来的线程安全问题。

 

防止方法被滥用重写:

如果你的代码中有一些关键逻辑,比如银行账户的转账方法就可以使用final来保护。

 

传递安全的参数:

当一个方法不希望某个参数被修改时,可以用final修饰,这样可以明确表达方法的设计意图,增加代码的可读性。

 

面试问答汇总 

final关键字的作用是什么?

保证不可变性。修饰变量时值不能修改,修饰方法时不能重写,修饰类时不能继承。

 

final修饰对象引用时能修改对象的内容吗?

能。final只限制引用,不能重新指向新的对象。

 

为什么String是final的?

为了保证不可变性提升性能,且便于多线程安全操作。

 

final和static一起用有什么作用?

定义全局常量。

 

END:面试官问你final有什么用时,不要在只是简单地说,用来修饰变量了,从修饰变量方法到位,从实际应用场景到原理优化。今天的这篇文章完全可以让你自信,面对各种刁钻问题。想了解更多java面试技巧,记得关注我。欢迎关注微信公众号软件求生,获取更多技术干货。

相关文章
|
设计模式 前端开发 Java
总结丨Spring 源码学习,看这一篇就够了
在日常工作中,产品不断写业务需求,他们加班一天,我们开发就得工作一周来完成。 业务领域达到一定地步后,发现日常编写业务代码已经很难让我有突破性的进步,日复一日,担心自己变成一个业务代码生产机器,而无法面对新技术和环境变化。 同时也有危机感,长江后浪推前浪,自己不继续学习的话,很快就会有人超过。 而且我算是比较热心的好同学,喜欢帮别人解决问题和记录解决方案,所以不希望在别人问我工作中有什么常用的框架,遇到这个问题该怎么办,我却回答不上的感觉
7971 1
总结丨Spring 源码学习,看这一篇就够了
|
前端开发 Java 程序员
面试官刁钻提问?轻松应对 break、continue 和 return 的巧妙用法
本次分享的主题是在面试break社招时被问到continue和return的区别与作用,面试官还刁钻的问了一些场景使用的坑点,小伙伴表示不太懂,现场有点慌。今天由我来给大家深入讲讲这三个关键词的区别和作用还会结合一些实战例子,保证你看完后不仅面试游刃有余,临时写代码也更得心应手,我们分为以下四部分。 1.了解背景铺垫的相关知识 2.Break、continue和return的定义 3.使用代码来实现三个关键字的逻辑 4.三个关键字在实践中应注意的坑点
|
负载均衡 Dubbo Java
Java SPI 和 API,傻傻分不清?
本文介绍了是SPI机制,然后结合业界案例与项目实践来说明SPI的使用场景,最后对Java SPI和API的区别进行了分析。
2926 0
|
Java 物联网 程序员
还在纠结抽象类和接口?看这篇就够了!
本文从一位程序员的角度出发,讲述了其小学弟在Java开发面试中遇到的难题——抽象类与接口的区别。文章不仅详细解析了两者的定义、特点及主要差异,还提供了实际开发中的应用场景和面试答题技巧,帮助读者更好地理解和应用这一重要知识点。
1657 12
|
12月前
|
设计模式 Java 程序员
【23种设计模式·全精解析 | 概述篇】设计模式概述、UML图、软件设计原则
本系列文章聚焦于面向对象软件设计中的设计模式,旨在帮助开发人员掌握23种经典设计模式及其应用。内容分为三大部分:第一部分介绍设计模式的概念、UML图和软件设计原则;第二部分详细讲解创建型、结构型和行为型模式,并配以代码示例;第三部分通过自定义Spring的IOC功能综合案例,展示如何将常用设计模式应用于实际项目中。通过学习这些内容,读者可以提升编程能力,提高代码的可维护性和复用性。
2597 1
【23种设计模式·全精解析 | 概述篇】设计模式概述、UML图、软件设计原则
|
存储 缓存 安全
ConcurrentHashMap的实现原理,非常详细,一文吃透!
本文详细解析了ConcurrentHashMap的实现原理,深入探讨了分段锁、CAS操作和红黑树等关键技术,帮助全面理解ConcurrentHashMap的并发机制。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
ConcurrentHashMap的实现原理,非常详细,一文吃透!
|
Java
什么是Java内部类,为什么使用它?
【4月更文挑战第13天】
533 1
|
安全 Java 开发者
深入解析ReentrantLock重入锁:Java多线程中的利器
深入解析ReentrantLock重入锁:Java多线程中的利器
2749 4
|
Java 编译器 Spring
面试突击78:@Autowired 和 @Resource 有什么区别?
面试突击78:@Autowired 和 @Resource 有什么区别?
16584 6