前言

Java中的关键字final的含义通常为“这是无法改变的”。下面将介绍final用于修饰数据、方法和类的这三种情况。

final数据

许多编程语言都有某种方法,来向告诉编译器这一块数据是不变的。有时候数据的恒定不变会很有用,比如编译时常量或者一个在运行时被初始化的值而你不希望改变它。对于编译期常量,编译器可以将该常量代入任何可能用到它的计算式中,也就是说,可以在编译时执行计算式,这将减轻运行时的负担。在Java中,常量必须是基本数据类型,以关键字final修饰,并且在定义的时候就必须为其赋值。一个既有static又有final修饰的域将占据一段不能改变的存储空间,这个域即表示编译时常量,也类似于C++中使用const关键字修饰的常量。

static final int MAX_NUM = 9999;	//默认既是static又是final修饰的域使用大写

当final修饰的不是基本数据类型而是对象的引用时,这时候要做好区分。当修饰基本数据类型时,是表示数值恒定不变;当修饰对象引用时,表示引用恒定不变。即,一旦引用初始化执行一个对象后,便不可以使它指向另外一个引用。但是所指向的对象自身确实可以被改变的。

空白fiinal

空白final是指声明为final但又未给定初始值的域。但是,无论在什么情况下,编译器都得确保空白final在使用前必须被初始化。空白final在关键字final的使用上提供了更大的灵活性,一个类中的final域就可以根据对象而有所不同,但又保持其恒定不变的特性。

空白final要在使用前确保被初始化,那么怎么才能确保呢?看下面这个简单的例子(《Java编程思想》)就可以明白:

class Poppet{
private int i;
Poppet(int ii){ i = ii;}
} public class BlankFinal{
private final int i = 0; //在定义时就初始化
private final int j; //空白final
private final Poppet p; //空白final引用
public BlankFinal(){ //在构造器中必须初始化空白final域或引用
j = 1;
p = new Poppet(1);
}
public static void main(String args[]){
new BlankFinal();
}
}

确保在使用空白final之前将其初始化的手段在于:必须在域的定义处或者每个构造器中用表达式对final进行赋值。

final参数

在参数列表中使用final去修饰参数,将意味着你在方法中将无法更改参数引用所指向的对象。

final方法

使用final方法的原因有两个。第一个是将方法锁定,以防止任何继承类修改它的含义。这是出于设计的考虑:想要确保在继承中使用方法行为保持不变,并且不会被覆盖。第二个原因是效率,但是在Java SE5/6后,都应该让编译器和JVM处理效率问题。因此,只有要明确禁止覆盖时,才将方法设置为final的。

final和private关键字

类中所有的private方法都隐式地指定为final的。由于无法取用到private方法,所以也就无法覆盖它。可以给private方法添加final修饰词但是这并没有任何意义。

final类

当将某个类整体定义为final时,就表明你不想该类被继承,该类就是一个终结类。final类中的所有方法都隐式地指定为final的,因此无法覆盖它们。

小结

本篇博文简要记述了Java的final关键字的使用,注意使用细节问题。

参考:

《Java编程思想》第四版

Java——final关键字的更多相关文章

  1. 深入java final关键字

    Java final关键字详解:https://blog.csdn.net/kuangay/article/details/81509164 深入java final关键字 用法注意点和JVM对其进行 ...

  2. 【转载】java final 关键字的几种用法

    原文链接点这里,感谢博主分享 在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构 ...

  3. [java]final关键字的几种用法

    在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构.下面我们来了解一下final ...

  4. [java]final关键字、finally关键字与finalize()方法

    final关键字: final关键字通常指的是“无法改变的”,使用“无法改变”这样修饰可能出于两个原因:设计或者效率. final可以修饰变量.方法和类. 一.final变量 一个既是static又是 ...

  5. java final关键字详解

    final是java中保留关键字,可以声明成员变量.类.方法与本地变量,一旦引用final关键字,将不能再改变这个引用,编译器会检查代码,要是想改变该引用,会报错. final变量? 凡是对成员变量或 ...

  6. 我去,你竟然还不会用 Java final 关键字

    写一篇文章容易吗?太不容易了,首先,需要一个安静的环境,这一点就非常不容易.很多小伙伴的办公室都是开放式的,非常吵,况且上班时间写的话,领导就不高兴了:只能抽时间写.其次,环境有了,还要有一颗安静的心 ...

  7. java final 关键字醍醐灌顶

    醍醐灌顶: final 关键字,它可以修饰数据 .方法.类. 可能有些同学傻傻分不清出,这里可以快速弄懂final; final 实例域: 可以将实例域定义为final,构建对象时必须初始化这样的域, ...

  8. Java final关键字特点

    一.特点 1.由于继承,方法可以重写,所以父类的功能就会被子类覆盖2.有时候我们不想子类覆盖父类的功能,这时候我们可以使用final关键字3.final可以修饰:类.变量,方法.4.final修饰类, ...

  9. java final关键字与static关键字

    一  final关键字 1.final修饰类不可以被继承,但是可以继承其他类. 例如: class Yy {} final class Fu extends Yy{} //可以继承Yy类 class ...

随机推荐

  1. C\C++ 内存对齐现象

    前几天一个在自学C语言的小伙伴问了我个问题,C语言结构体储存所占空间为啥和自己预测的不一样.看一下下面这一段代码: struct node{ int num; char ch; }a; printf( ...

  2. Vue.set() this.$set()引发的视图更新思考

    引文 vue文档列表渲染中有条注意事项: 这里提到的两种情况实际改变了数据但是没有触发视图更新. 由此引出Vue.set(),先上文档API: this.$set()和Vue.set()本质方法一样, ...

  3. PHP 反射的简单使用

    反射机制简介 之前已经介绍过Java反射机制的简单使用,所有的反射机制的思想作用等都是类似的,下面就一起来了解一下PHP反射机制. 个人理解:反射机制就是可以利用类名或者一个类的对象来获取关于这个类的 ...

  4. Html元素添加事件禁用

    最近几天,测试在检测我页面功能时,疯狂点击带接口请求的按钮,然后就会发起无数次请求,然后app就卡住了.当看到这个问题的时候,心里疯狂鄙视测试(开个玩笑),一开始想的到解决方案是用函数防抖,使用函数防 ...

  5. git 服务器搭建与运用

    环境:CentOS 6 为了不影响后面的安装 安装依赖库 yum install curl-devel expat-devel gettext-devel openssl-devel zlib-dev ...

  6. SQL Server Cast、Convert数据类型转换

    一.概述 本篇文章转载来着官网在线文档,文章主要介绍SQL Server数据类型转换相关语法.隐式转换.Date样式等. 语法 Syntax for CAST: CAST ( expression A ...

  7. vue项目实践-添加express-mockjs进行数据模拟

    mock-server 在新项目开始的时候,后端框架还没有,前端就有能够自己操作的模拟数据的服务是可以有的 express-mockjs 是楼教主结合 express+mock-lite 造的一个轮子 ...

  8. SDL 开发实战(二):SDL 2.0 核心 API 解析

    在上一篇文章 SDL 开发实战(一):SDL介绍及开发环境配置 中,我们配置好了SDL的开发环境,并成功运行了SDL的Hello World 代码.但是可能大部分人还是读不太明白具体Hello Wol ...

  9. Kali学习笔记43:SQL盲注

    前面的文章都是基于目标会返回错误信息的情况进行判断是否存在SQL注入 我们可以轻易根据数据库报错信息来猜测SQL语句和注入方式 如果程序员做得比较好,不显示错误信息,这种情况下得SQL注入称为SQL盲 ...

  10. [Swift]LeetCode927. 三等分 | Three Equal Parts

    Given an array A of 0s and 1s, divide the array into 3 non-empty parts such that all of these parts ...