final 在 java 中有什么作用?

简介: final 在 java 中有什么作用?

final作为Java中的关键字可以用于三个地方。用于修饰类、类属性和类方法。


特征:凡是引用final关键字的地方皆不可修改!


(1)修饰类:表示该类不能被继承;


(2)修饰方法:表示方法不能被重写;


(3)修饰变量:表示变量只能一次赋值以后值不能被修改(常量)。


相信大家都具备基本的常识: 被final修饰的变量是不能够被改变的. 但是这里的"不能够被改变"对于不同的数据类型是有不同的含义的.

当final修饰的是一个基本数据类型数据时, 这个数据的值在初始化后将不能被改变; 当final修饰的是一个引用类型数据时, 也就是修饰一个对象时, 引用在初始化后将永远指向一个内存地址, 不可修改. 但是该内存地址中保存的对象信息, 是可以进行修改的.

上一段话可能比较抽象, 希望下面的图能有助于你理解, 你会发现虽说有不同的含义, 但本质还是一样的.


首先是final修饰基本数据类型时的内存示意图


 

  • 如上图, 变量a在初始化后将永远指向003这块内存, 而这块内存在初始化后将永远保存数值100.

 

  • 下面是final修饰引用数据类型的示意图


在上图中, 变量p指向了0003这块内存, 0003内存中保存的是对象p的句柄(存放对象p数据的内存地址), 这个句柄值是不能被修改的, 也就是变量p永远指向p对象. 但是p对象的数据是可以修改的.

 

不难看出final修饰变量的本质: final修饰的变量会指向一块固定的内存, 这块内存中的值不能改变.

引用类型变量所指向的对象之所以可以修改, 是因为引用变量不是直接指向对象的数据, 而是指向对象的引用的. 所以被final修饰的引用类型变量将永远指向一个固定的对象, 不能被修改; 对象的数据值可以被修改.


相关文章
|
5月前
|
Java
【零基础学Java】—final关键字与四种用法(二十九)
【零基础学Java】—final关键字与四种用法(二十九)
|
2天前
|
Java
Java中final关键字(看这篇就够了)
Java中final关键字(看这篇就够了)
28 0
|
2天前
|
Java API
【JAVA】final、finally、finalize 有什么区别?
【JAVA】final、finally、finalize 有什么区别?
|
2天前
|
Java
面试官:小伙子来说一说Java中final关键字,以及它和finally、finalize()有什么区别?
面试官:“小伙子,用过final关键字吗?” 我:“必须用过呀” 面试官:“好,那来说一说你对这个关键字的理解吧,再说一说它与finally、finalize()的区别” 我:“好嘞!
19 1
|
2天前
|
存储 Java 编译器
27、详解 Java 中的 final 关键字
27、详解 Java 中的 final 关键字
31 0
|
7月前
|
存储 Java 编译器
【Java异常】Variable used in lambda expression should be final or effectively final
【Java异常】Variable used in lambda expression should be final or effectively final
83 0
【Java异常】Variable used in lambda expression should be final or effectively final
|
7月前
|
存储 Java 编译器
【Java异常】Variable used in lambda expression should be final or effectively final
【Java异常】Variable used in lambda expression should be final or effectively final
89 0
|
2天前
|
缓存 安全 Java
Java 中的final:不可变性的魔法之旅
Java 中的final:不可变性的魔法之旅
26 0
|
2天前
|
Java 程序员
类的继承和super,final关键字的使用(JAVA)
类的继承和super,final关键字的使用(JAVA)
30 0
|
2天前
|
Java 程序员 编译器
Java语言特性:Java中的final关键字的作用是什么?
Java语言特性:Java中的final关键字的作用是什么?
22 0