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

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

1. 自我经历

 

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

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

 

2. final修饰变量 

2.1修饰基本数据类型

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

 

2.2修饰引用数据类型

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

 

2.3 final修饰方法

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

 

2.4性能优化

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

 

3. final修饰类 

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

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

 

3.1 final和static:

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

 

3.2 final和abstract:

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

 

4. final的实际应用场景 

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

 

4.1定义常量:

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

 

4.2实现不可变类:

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

 

4.3防止方法被滥用重写:

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

 

4.4传递安全的参数:

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

 

5. 面试问答汇总 

5.1 final关键字的作用是什么?

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

 

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

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

 

5.3 为什么String是final的?

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

 

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

定义全局常量。

 

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

相关文章
|
4月前
|
Java
【Java基础面试十一】、int和Integer有什么区别,二者在做==运算时会得到什么结果?
这篇文章解释了Java中`int`基本数据类型和其包装类`Integer`之间的区别,并指出在进行`==`运算时,`Integer`会拆箱为`int`类型,然后比较它们的值是否相等。
【Java基础面试十一】、int和Integer有什么区别,二者在做==运算时会得到什么结果?
|
7月前
|
Java
【面试问题】final 和可以保证可见性吗?
【1月更文挑战第27天】【面试问题】final 和可以保证可见性吗?
|
7月前
|
算法 测试技术
class062 宽度优先遍历及其扩展【算法】
class062 宽度优先遍历及其扩展【算法】
53 0
|
编译器 C++
C++11新特性探究:显式override和final
C++中,我们一般可以以基类声明纯虚函数,然后让派生类继承并重写这个虚函数,用override表示显示覆盖基类方法,但一直没有提供一种方法来阻止派生类继承基类的虚函数。
|
编译器
public final static搭配的好处
final 和 static 往往搭配使用,效率更高,不会导致类加载.底层编译器做了优化处理
184 0
public final static搭配的好处
|
PHP 开发者
最终类 final|学习笔记
快速学习最终类 final,前面说的 PHP 是可以继承的,类是可以继承的,类有我可以继承子类,再往后类又可以继承孙子类,类可以无无限继承,现在确定一个问题,类继承的多了,代表类的重用性增加了,但是系统的解析复杂程度会增加,随之而来的是效率的降低。 那如果有些类已经达到最小的程度,无法再扩展时,或者不需要继续扩展了,这个时候就要使用最终类 final。现在了解一些什么是最终类,掌握 final 关键字的最终作用和实际应用场景。
最终类 final|学习笔记
|
缓存 Java
通过JDK源码角度分析Long类详解
通过JDK源码角度分析Long类详解
通过JDK源码角度分析Long类详解
|
存储 缓存 安全
ConcurrentHashMap 有十个提升性能的地方,你都知道吗?
如何在高并发下提高系统吞吐是所有后端开发者追求的目标,Java并发的开创者Doug Lea在Java 7 ConcurrentHashMap的设计中给出
ConcurrentHashMap 有十个提升性能的地方,你都知道吗?
|
存储 缓存 安全
String性能提升10倍的几个方法!(源码+原理分析)上
String性能提升10倍的几个方法!(源码+原理分析)
145 0
String性能提升10倍的几个方法!(源码+原理分析)上
|
存储 Java
String性能提升10倍的几个方法!(源码+原理分析)下
String性能提升10倍的几个方法!(源码+原理分析)
144 0
String性能提升10倍的几个方法!(源码+原理分析)下

热门文章

最新文章