1.         修饰基础数据成员的final

这是final的主要用途,其含义相当于C/C++的const,即该成员被修饰为常量,意味着不可修改。如java.lang.Math类中的PI和E是final成员,其值为3.141592653589793和2.718281828459045。

2.         修饰类或对象的引用的final

在Java中,我们无法让对象被修饰为final,而只能修饰对象的引用,这意味着即使你写public final A a = new A(); 事实上a指向的对象的数据依然可以被修改,不能修改的是a本身的引用值,即你不能再对a进行重赋值。同样的情况出现在数组中,比如public final int[] a = {1, 2, 3, 4, 5},事实上a中的数值是可修改的,即可以写a[0] = 3。据目前了解,java中数组内的数据是无法修饰为不可修改的,而C/C++可以。

3.         修饰方法的final

修饰方法的final和C/C++中修饰成员对象的const大不相同。首先,修饰方法的final含义不是“不可修改”,而是指该方法不可被继承成员重新定义。(注意,这里所说的不能被重新定义,并不是指子类一定不能定义同名方法,如果父类的方法是私有类型,子类是允许定义该方法的,这里指的不能重新定义是指不能通过改写方法来使得方法重写的多态性得以实现,如不希望A a = new B(); a.f();这样的重写方法情况出现)

示例:

public class A {

// final方法f

public final void f() {

System.out.println("类A中的final方法f被调用了");

}

}

public class B extends A {

// 编译错误!父类的f方法是final类型,不可重写!

//! public void f() {

//!     System.out.println("类B中的方法f被调用了");

//! }

}

此外,当一个方法被修饰为final方法时,意味着编译器可能将该方法用内联(inline)方式载入,所谓内联方式,是指编译器不用像平常调用函数那样的方式来调用方法,而是直接将方法内的代码通过一定的修改后copy到原代码中(将方法主体直接插入到调用处,而不是进行方法调用)。这样可以让代码执行的更快(因为省略了调用函数的开销),比如在int[] arr = new int[3]调用arr.length()等。

另一方面,私有方法也被编译器隐式修饰为final,这意味着private final void f()和private void f()并无区别。

4.         修饰类的final

当一个类被修饰为final时,它的含义很明确,就是不允许该类被继承,也就是说,该类“绝后”了,任何继承它的操作都会以编译错误告终。这也凸显出Java用final而不用const作为标识符的理由。(成员变量可以不是final,成员方法直接是final的)

示例:

public final class A {

}

// 编译错误!A是final类型,不可被继承!

//!public class B extends A{

//!}

5.                        参数final

对对象参数做final修饰。以为对象变量传递的是其引用,为防止调用过程中无意的更改而修饰。

java final 函数_JAVA中Final的用法相关推荐

  1. java final定义_Java中final关键字的用法

    final在Java中并不常用,然而它却为我们提供了诸如在C语言中定义常量的功能,不仅如此,final还可以让你控制你的成员.方法或者是一个类是否可被覆写或继承等功能,这些特点使final在Java中 ...

  2. java final 实例_Java中final实现原理的深入分析(附示例)

    本篇文章给大家带来的内容是关于Java中final实现原理的深入分析(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. final在Java中是一个保留的关键字,可以声明成员变 ...

  3. java 反射修改final变量_Java中final的属性值怎么利用反射机制进行修改

    Java中final的属性值怎么利用反射机制进行修改 发布时间:2020-12-02 17:31:07 来源:亿速云 阅读:96 作者:Leah 今天就跟大家聊聊有关Java中final的属性值怎么利 ...

  4. java replaceall函数_JAVA中string.replace和string.replaceAll的区别及用法

    展开全部 JAVA中string.replace()和string.replaceAll()的区别及用法乍一看,字面上理解好像replace只替换第一个出现的字符(受javascript的影响),32 ...

  5. java this()函数_java中this关键字的三种用法

    this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针. this的用法在java中大体可以分为3种: 1.普通的直接引用,this相当于是指向当前对象本身. 2.形参与成员名字重 ...

  6. java synchronized 使用_Java中Synchronized的用法

    synchronized是Java中的关键字,是一种同步锁.它修饰的对象有以下几种: 1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码 ...

  7. java synchronized静态_Java中Synchronized的用法(简单介绍)

    简单介绍 synchronized是Java中的关键字,是一种同步锁.它修饰的对象有以下几种: 1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调 ...

  8. java math 函数_Java中Math类常用函数总结

    Java中比较常用的几个数学公式的总结: //取整,返回小于目标函数的最大整数,如下将会返回-2 Math.floor(-1.8): //取整,返回发育目标数的最小整数 Math.ceil() //四 ...

  9. java addcallback函数_java中怎么使用callback函数?

    UYOU 在很多场景,作为开发都会想到,在执行完毕一个任务的时候,能执行一个callback函数是多么好的事情.现在模拟一下这个情景:定义三个类.分别是主函数类.callback函数的接口类.业务处理 ...

最新文章

  1. 利用SQl对数据库实行数据拆分与组合
  2. c语言指针实验报告总结,c语言指针实验报告
  3. UOJ #149 [NOIP 2015] 子串
  4. Linux 配置文件
  5. Python机器学习:PCA与梯度上升:008使用PCA对数据进行降噪
  6. CentOS7完全卸载mysql5.7重装8.0
  7. android加载海康威视(萤石sdk)摄像头
  8. 上海富勒wms_【3PL | 宝时物流应用富勒WMS,提升现代化仓储管理水平 】
  9. w10系统 怎么快捷搜索服务器,w10系统怎么远程连接服务器
  10. 计算机操作入门基础知识,电脑入门基本操作知识
  11. Android更改开机画面
  12. 爬取京东辣条商品详情
  13. word文档中表格顶头怎么调整_教你用Word制作专用信纸,轻松几步就完成
  14. 北京航空航天大学研究生院计算机科学与技术哪个方向偏嵌入式,北京航空航天大学研究生2018年考研专业介绍:计算机科学与技术...
  15. web前端开发学什么?自学需要多久?
  16. Flutter urlencode转换
  17. 参数辨识法来调节simulink中的PI参数
  18. FPGA异步信号寄存器打拍
  19. 使用WinPE安装Windows 7——思齐博客
  20. vue3+vite 项目动态渲染本地图片

热门文章

  1. tkinter Scale滑块
  2. HDU 3974 Assign the task(DFS序+线段树单点查询,区间修改)
  3. 转载来自朱小厮的博客的NIO相关基础篇
  4. Python面试题汇总
  5. Elasticsearch增删改查 之 —— Delete删除
  6. android---手电筒之摩尔斯电码
  7. 小贷公司的风险成因及应对策略——风险篇
  8. python每日经典算法题5(基础题)+1(较难题)
  9. 转:Mac文件权限操作详细记录
  10. 【Statistics】均值