本文主要介绍了Java中final的使用方法,final是java的关键字,本文就详细说明一下它的使用方法,需要的朋友可以参考下

概念

final 具有“不可改变的”的含义,可以修饰 非抽象类、非抽象成员方法和变量。

用 final 修饰的类不能被继承,没有子类。

用 final 修饰的方法不能被子类的方法覆盖(重写)。

用 final 修饰的变量表示常量,只能被赋一次值(声明变量的时候)。

注:

final 不能用来修饰构造方法,因为“方法覆盖”这一概念仅适用于类的成员方法,而不适用于类的构造方法,父类的构造方法和子类的构造方法之间不存在覆盖的关系,因此用final修饰构造方法没有任何意义。

父类中用 private 修饰的方法不能被子类的方法所覆盖,因此可以理解为 private 类型的方法默认是 final 类型的。

final 类

把类定义为 final,使这个类不能被继承。具体使用场景如下:

不是专门为继承而设计的类,类本身的方法之间有复杂的调用关系。如果随意创建这些类的子类,子类有可能会错误的修改了父类的实现细节。

处于安全的原因,类的实现细节不允许在被扩展。

在创建对象模型时,确信这个类不会再被扩展。

例如:JDK中的java.lang.String 类被定义为 final 类型。

public final class String{...}

final 方法

在某些情况下,出于安全原因,父类不允许子类覆盖某个方法,此时可以把这个方法声明为 final 类型。

例如:JDK中的java.lang.Object 类中,getClass()方法为 final 类型,而 equals() 方法不为 final 类型。

所有 Object 的子类都可以覆盖 equals() 方法,但不能覆盖 getClass() 方法。

final 变量

用 final 修饰的变量表示取值不会改变的常量。

例如:JDK中 java.lang.Integer 类中定义了两个常量。

public static final int   MIN_VALUE = 0x80000000;

public static final int   MAX_VALUE = 0x7fffffff;

final 变量具有以下特征:

final修饰符可以修饰静态变量、成员变量和局部变量,分别表示静态常量、实例常量和局部常量。

public class Demo{

public static final int MAX_VALUE = 23; //静态常量

public static final int MIN_VALUE = 10; //静态常量

private final Date birthday = new Date(); //成员常量

}

静态常量一般以大写字母命名,单词之间以“_”符号分开。

final修饰的成员变量必须初始化。

public class FinalTest {

final int a = 1; //成员常量 默认初始化

static final int b = 2; //静态常量 默认初始化

final int c; //成员常量

static final int d; //静态常量

public FinalTest(){

c = 3; //成员常量 未默认初始化,可在构造函数中初始化

}

static {

d = 4; //静态常量 未默认初始化,可在静态代码块中初始化

}

}

final 变量只能赋一次值,如果将引用类型的变量用 final 修饰,该变量只能始终引用一个对象,但可以改变对象的内容。

public class FinalTest {

String str = "";

public void print(){

System.out.println(str);

}

public static void main(String[] args){

final FinalTest finalTest = new FinalTest();

finalTest.str = "xixihaha";

finalTest.print();

}

}

总结:

实际程序中,通过 final 修饰符来定义常量,目的为:

提高程序的安全性。

提高代码可维护性。

提供代码可读性。

以上就是本文的全部内容,希望对大家的学习有所帮助。

java中常量final的用法_详解Java中final的用法相关推荐

  1. java 判断数组已经存满_详解Java中数组判断元素存在几种方式比较

    1. 通过将数组转换成List,然后使用List中的contains进行判断其是否存在 public static boolean useList(String[] arr,String contai ...

  2. python中list[1啥意思_详解Python中list[::-1]的几种用法

    本文主要介绍了Python中list[::-1]的几种用法,分享给大家,具体如下: s = "abcde" list的[]中有三个参数,用冒号分割 list[param1:para ...

  3. java object数组转实体类_详解Java中String JSONObject JSONArray List实体类转换

    JSON使用阿里的fastJson为依赖包 gradle依赖管理如下: compile group: "com.alibaba", name: "fastjson&quo ...

  4. python namedtuple用法_详解Python中namedtuple的使用

    namedtuple是Python中存储数据类型,比较常见的数据类型还有有list和tuple数据类型.相比于list,tuple中的元素不可修改,在映射中可以当键使用. namedtuple: na ...

  5. [转载] python中for语句用法_详解Python中for循环的使用_python

    参考链接: 在Python中将else条件语句与for循环一起使用 这篇文章主要介绍了Python中for循环的使用,来自于IBM官方网站技术文档,需要的朋友可以参考下 for 循环 本系列前面 &q ...

  6. python中for语句用法_详解Python中for循环的使用_python

    这篇文章主要介绍了Python中for循环的使用,来自于IBM官方网站技术文档,需要的朋友可以参考下 for 循环 本系列前面 "探索 Python,第 5 部分:用 Python 编程&q ...

  7. java斐波那契查找_详解Java Fibonacci Search斐波那契搜索算法代码实现

    一, 斐波那契搜索算法简述 斐波那契搜索(Fibonacci search) ,又称斐波那契查找,是区间中单峰函数的搜索技术. 斐波那契搜索采用分而治之的方法,其中我们按照斐波那契数列对元素进行不均等 ...

  8. python3中input输入浅谈_详解Python3中的 input() 函数

    详解Python3中的 input() 函数 一.知识介绍: 1.input() 函数,接收任意输入,将所有输入默认为字符串处理,并返回字符串类型: 2.可以用作文本输入,如用户名,密码框的值输入: ...

  9. 前端中unescape是什么意思_详解JavaScript中的Unescape()和String() 函数

    JavaScript中的Unescape()和String() 函数详解,具体内容如下所示: 定义和用法 JavaScript unescape() 函数可对通过 escape() 编码的字符串进行解 ...

  10. python中filepath路径怎么写_详解Python中的路径问题

    1. 绝对路径引入 Python 在搜索模块时,依次搜索sys.path里的位置,直到找到模块为止.下面命令可以查看当前的搜索路径: import sys print(sys.path) sys.pa ...

最新文章

  1. 230套java web开发PDF书籍和CHM参考手册资料大全 免费下载
  2. 一次蚂蚁金服的辛酸面试历程
  3. python元素分类_Python 练习 - 元素分类
  4. 将一个字段的多个记录值合在一行
  5. mysql 联合索引匹配原则
  6. 获取目录-Winform
  7. 二次元日系游戏制作工具 - live2dSDK入门教程
  8. 安装 VS2010 中文旗舰版
  9. centos设置静态IP地址
  10. 群晖系统ftp服务器,群晖对接云服务器ftp
  11. Kent Beck确认参加敏捷中国大会2009,讲述其35年架构设计心得
  12. 人类有两大学习能力,即记忆力和理解力
  13. Python 实现英文新闻摘要自动提取 1
  14. Newt Scamander的恐惧
  15. Windows-Server-2016外置网卡,安装不了驱动,解决方法
  16. 从两幅图像的匹配点计算焦距f
  17. 网页爬虫1--正则表达式
  18. 中国石油大学远程教育《大学英语(四)》第二阶段在线作业
  19. 【技术认证题库】齐治初级运维安全认证——RIS堡垒机习题
  20. 宏转录组方法_Cell:基因表达的改变和群落的更替塑造了全球海洋宏转录组

热门文章

  1. mybatisplus执行sql语句_一条更新的SQL语句是如何执行的?
  2. 使用POI导入和导出 Excel文件
  3. 一个html多个html文件怎么打开网页,Firefox如何单窗口多页面浏览
  4. Java熔断框架有哪些_降级熔断框架 Hystrix 源码解析:滑动窗口统计
  5. 联发科技嵌入式_英特尔联手联发科技重回移动5G征途,能否与高通抗衡?
  6. Rotation Matching CodeForces - 1365C(贪心)
  7. java线程同步的实现_Java并发编程(三) - 实战:线程同步的实现
  8. 【编译原理】编译是怎么一个过程?
  9. php 定时缓存,php页面设置缓存时间实例代码
  10. 深度学习之循环神经网络(10)GRU简介