我们都知道,Java是面向对象的语言,而面向对象有一种思想就是继承。但是有时候,出于某种原因,我们不希望我们的类、方法或者变量被继承或重写,这个时候,我们就需要final关键字来帮助我们达到这种效果。

final 类

当使用final关键字来标记一个类,则表示该类不能被继承。例如我们经常使用的String类就被标记为final,表明String类不能够继承。设想一下,如果我们可以继承 String 类,重写它的任何方法,并用特定 String 子类的实例替换所有 String 实例,那么对 String 对象进行操作的结果将变得不可预测。 而且考虑到到处都在使用 String 类,因此这种继承是不可接受的。 这就是为什么 String 类被标记为 final。

Java中的String类

final 方法

被标记为final的方法是不能被重写的。当我们设计一个类并且认为一个方法不应该被重写时,我们可以将这个方法标记为final。有时候,我们并不想把我们的整个类都标记为final,我们只是希望它其中的部分方法不被重写就可以,这个时候,我们可以使用final关键字来修饰该方法。如我们的Thread类本身并不是final的,但是getName()方法是final的。

java中Thread类的final方法

final 变量

被标记为final的变量是不能被重新赋值的。一旦final变量被初始化,就不能被修改。

final类型修饰的变量分为以下几种情况:

  • 原始类型的final变量,例如int,long,double等,一旦初始化,是不能被修改的,否则编译器会报错。
  • 引用类型的final变量,例如我们自定义一个final 类型的Person对象,虽然Person对象本身不能被修改,但是我们还是可以通过person.setName("chris");方法来修改Person中name的属性值。
  • final类型的变量要么是常量字段,即声明的时候就赋一个常量值,要么只能被赋值一次,之后不能被修改。如我们通常会在一个类中声明一个final类型的成员变量,然后在构造方法中将该成员变量初始化一次,有些地方将这种final变量叫做final blank(final 空白)。
  • final类型的形式参数。有时候,我们会把一个方法的形参设置为final的,譬如:
public void setName(final String name) {    this.name = name;}

这表明我们不希望该形参在方法内被修改。

总结

在本文中,我们了解了final的一些常用用法,例如final变量可以用来修饰类,方法,变量等,这在有些情况下对我们的代码设计很有帮助。

final关键字_Java中的final关键字相关推荐

  1. java修饰类的关键字_JAVA中的修饰关键字

    今天我们来说说JAVA中的修饰关键字. 常用的有: 1.final 关键字 修饰成员变量:a. 必须初始化值. b. 被fianl修饰的成员变量赋值,有两种方式:1.直接赋值 2.全部在构造方法中赋初 ...

  2. 什么是java的关键字_java中常见的关键字

    什么是关键字呢? 概述:关键字就是在java语言中赋予特殊含义的单词 特点:1.组成的关键字的单词全是小写 2.常见的代码编辑器中,对关键字都有特殊的颜色标记 比如在idea中对关键字都有特殊的颜色标 ...

  3. java transient 关键字_java中的transient关键字详解

    前言 说实话学了一段时间java的朋友对于transient这个关键字依旧很陌生基本没怎么用过,但是transient关键字在java中却起到了不可或缺的地位!如果要说讲到,我觉得最可能出现的地方是I ...

  4. java中default关键字_Java 中的 default 关键字及代码示例

    本文通过代码示例介绍如何在 Java 中使用 default 关键字. 基本上,有 3 个地方可以使用 Java 中的 default 关键字: 在 switch case 语句中指定默认值 在 Ja ...

  5. java异常类关键字_Java中的异常处理关键字是什么?

    java异常处理中使用了四个关键字. throw:有时我们明确要创建异常对象然后抛出它来停止程序的正常处理.throw关键字用于向运行时抛出异常来处理它. throws:当我们在方法中抛出任何已检查的 ...

  6. java中有效关键字_java中有效的关键字

    true.false.null都不是关键字 goto.const.是保留的关键字 abstract continue for new switch default if package synchro ...

  7. java中的me关键字_java中的volatile关键字

    一.详细解释 在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉. Java语言是支持多线程的,为了解决线程并 ...

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

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

  9. java+中的final关键字有哪些用法_Java中的Final关键字用法汇总及简单示例

    可能使用到final的情况有3种:数据.方法和类. 一.final数据 对于基本类型,final使数值恒定不变:而对于对象引用,final使引用恒定不变.一旦引用被初始化指向一个对象,就无法把它改为指 ...

最新文章

  1. 玩转Parse(第一篇:新手入门)
  2. 带命令行参数的main函数的误解[到处转载的垃圾]
  3. 2021年新高考八省联考成绩查询辽宁,辽宁八省联考成绩什么时候出 辽宁八省联考成绩查询入口...
  4. QT导入libcurl
  5. [转]DevExpress GridControl 关于使用CardView的一点小结
  6. Sql Full-Text Filter
  7. c# RestSharp(http请求)
  8. Linux操作系统基础命令
  9. 类EMD的“信号分解方法”及MATLAB实现(第一篇)——EEMD
  10. java计算集合交差并集
  11. 小黄鸡 java_用java实现Simsimi小黄鸡接口
  12. Apache Doris 在京东广告报表查询场景下的应用
  13. HDOJ--1162--Eddy's picture
  14. PowerBI自动切换中英文单位
  15. linux中mtd是什么目录,关于linux mtd的理解
  16. 【每日面试】2021政采云Java一面
  17. AS(android studio) 添加第三方库时报,Error: Failed to resolve: com.github Affected Modules 解决办法
  18. 【办公】罗技设备(基于M590)使用方法
  19. shell习题-27
  20. TRS全文检索开发文档及API,工具包

热门文章

  1. 走近分形与混沌(part4)--牛顿与混沌
  2. pycharm更改为系统python3_今天配置好python3 装好了pycharm 就新建一个django一直改不好...
  3. 开源工具 @sap/ux-ui5-tooling 介绍
  4. SAP UI5 应用开发教程之二十九 - SAP UI5 的路由和导航功能介绍试读版
  5. SAP Spartacus 服务器端 nodejs 应用里渲染 Angular Component 的一个例子
  6. css 元素 property value计算过程的学习笔记
  7. SAP UI5里使用jQuery.ajax采用同步的方式读取数据
  8. SAP Analytics Cloud里的Planning model
  9. Why SAP SQL view is not recommended to use in SQL ?
  10. 在SAP云平台ABAP编程环境里使用CAP模型创建Fiori应用