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面试技巧,记得关注我。欢迎关注微信公众号软件求生,获取更多技术干货。

相关文章
|
6月前
|
存储 缓存 前端开发
技术好文共享:详解Paint的各种set方法
技术好文共享:详解Paint的各种set方法
64 0
|
6月前
|
程序员 Linux Shell
程序员必知:初始Mkaefile
程序员必知:初始Mkaefile
28 0
|
编译器
public final static搭配的好处
final 和 static 往往搭配使用,效率更高,不会导致类加载.底层编译器做了优化处理
184 0
public final static搭配的好处
|
PHP 开发者
最终类 final|学习笔记
快速学习最终类 final,前面说的 PHP 是可以继承的,类是可以继承的,类有我可以继承子类,再往后类又可以继承孙子类,类可以无无限继承,现在确定一个问题,类继承的多了,代表类的重用性增加了,但是系统的解析复杂程度会增加,随之而来的是效率的降低。 那如果有些类已经达到最小的程度,无法再扩展时,或者不需要继续扩展了,这个时候就要使用最终类 final。现在了解一些什么是最终类,掌握 final 关键字的最终作用和实际应用场景。
最终类 final|学习笔记
|
存储 SQL 关系型数据库
int(1) 和 int(10) 有什么区别?资深开发竟然都理解错了
int(1) 和 int(10) 有什么区别?资深开发竟然都理解错了
177 0
int(1) 和 int(10) 有什么区别?资深开发竟然都理解错了
|
消息中间件 Java Kafka
【面试题看源码】-HashMap 初始容量 计算方法
【面试题看源码】-HashMap 初始容量 计算方法
【面试题看源码】-HashMap 初始容量 计算方法
|
存储 缓存 安全
String性能提升10倍的几个方法!(源码+原理分析)上
String性能提升10倍的几个方法!(源码+原理分析)
147 0
String性能提升10倍的几个方法!(源码+原理分析)上
|
存储 Java
String性能提升10倍的几个方法!(源码+原理分析)下
String性能提升10倍的几个方法!(源码+原理分析)
145 0
String性能提升10倍的几个方法!(源码+原理分析)下
|
存储 算法 Java
String最大长度是多少?涉及知识面太多,不要错过!
String最大长度是多少?涉及知识面太多,不要错过!
321 0
String最大长度是多少?涉及知识面太多,不要错过!
|
算法 Java 开发者
阿里《JAVA开发手册》为什么建议设置HashMap的初始容量,设置多少合适
阿里《JAVA开发手册》为什么建议设置HashMap的初始容量,设置多少合适
2117 0
阿里《JAVA开发手册》为什么建议设置HashMap的初始容量,设置多少合适