1.修饰基础数据成员

这是final的主要用途,其含义相当于C/C++的const,即该成员被修饰成常量,不可修改。

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] = 6;。

3.修饰方法的final

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

 1 public class A {
 2
 3     // final方法f
 4
 5     public final void f() {
 6
 7        System.out.println("类A中的final方法f被调用了");
 8
 9     }
10
11 }
12
13 public class B extends A {
14
15     // 编译错误!父类的f方法是final类型,不可重写!
16
17     //! public void f() {
18
19     //!     System.out.println("类B中的方法f被调用了");
20
21     //! }
22
23 }

此外,当一个方法被修饰为final方法时,意味着编译器可能将该方法用内联方式载入。所谓内联方式是指编译器不用像平常调用函数那样的方式来调用,而是直接将方法内的代码通过一定的修改后copy到源代码中(将方法主体直接插入到调用处,而不是调用方法),这样可以更快的执行

4.修饰类的final

当一个类被修饰为final时,它含义很明确,不允许该类被继承。

1 public final class A {
2
3 }
4
5 // 编译错误!A是final类型,不可被继承!
6
7 //!public class B extends A{
8
9 //!}

5.参数final

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

6.static加final一块用

这两者放到一块可以简单理解为“全局常量”,对于变量,表示一旦给值就不能修改,可通过类名访问。对于方法,表示不可覆盖且可通过类名直接访问。

7.java允许空白final

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

 1 class Poppet{
 2     private int i;
 3     Poppet (int ii){
 4         i = ii;
 5 }
 6
 7 pulic class BlankFinal{
 8
 9     private final int i = 0;//初始化final
10     private final int j; //空白final
11     private final Poppet p;//空白final引用
12
13     //空白final必须在构造器中初始化
14     public BlankFinal(){
15         j = 1;//初始化空白final
16         p = new Poppet(1);//初始化空白final引用
17     }
18
19     public BlankFinal(int x){
20         j = x;//初始化空白final
21         p = new Poppet(x);//初始化空白final引用
22     }
23
24     public static void main(String[] args){
25         new BlankFinal();
26         new BlankFinal(47);
27     }
28 }

必须在域的定义处或者每个构造器中用表达式对final进行填充,这正是final域在使用前总是被初始化的原因所在。

8.final和private关键字

类中所有private方法都隐式的指定为final。无法取用private,故无法覆盖它。

转载于:https://www.cnblogs.com/Pillar/p/4218737.html

java中final用法相关推荐

  1. java中final详解_Java中final用法与详解

    Java中final用法与详解 final作为Java中经常用到的关键字,了解final的使用方法是非常有必要的.这里从final关键字在数据域.方法和类中三个方面分析final关键字的主要用法. f ...

  2. JAVA中Final的用法

    JAVA中Final的用法 1. 修饰基础数据成员的final 这是final的主要用途,其含义相当于C/C++的const,即该成员被修饰为常量,意味着不可修改.如java.lang.Math类中的 ...

  3. 转 Java中final、finally、finalize的区别与用法

    Java中final.finally.finalize的区别与用法 1.简单区别: final用于声明属性,方法和类,分别表示属性不可交变,方法不可覆盖,类不可继承. finally是异常处理语句结构 ...

  4. Java中final的三种用法

    在java中final的三种用法: 1. final成员变量 2. final函数 3. final类 final成员变量 当你在类中定义变量时,在其前面加上final关键字,那便是说这个变量一旦被初 ...

  5. java中常量final的用法_详解Java中final的用法

    本文主要介绍了Java中final的使用方法,final是java的关键字,本文就详细说明一下它的使用方法,需要的朋友可以参考下 概念 final 具有"不可改变的"的含义,可以修 ...

  6. java中extends用法_JAVA的extends用法

    理解继承是理解面向对象程序设计的关键.在Java中,通过关键字extends继承一个已有的类,被继承的类称为父类(超类,基类),新的类称为子类(派生类).在Java中不允许多继承. (1)继承 cla ...

  7. java 中final修饰的变量_java中final修饰符的使用方法

    本文为大家分享了java中final修饰符的使用,供大家参考,具体内容如下 1.final修饰符的用法: final可以修饰变量,被final修饰的变量被赋初始值之后,不能对它重新赋值. final可 ...

  8. cal java中的用法_Java中static用法

    Java中static用法 转自 http://blog.pfan.cn/sword2008/13772.html 一.static 请先看下面这段程序: public class Hello{ pu ...

  9. java中import用法

    java中import用法 单类型导入(single-type-import),例如import java.io.File; 按需类型导入(type-import-on-demand),例如 impo ...

  10. java中final关键字的使用

    final 中文翻译为 最终的,在java中也是较为常用的关键字之一. 在java 中 final 关键字可以修饰  类.方法.变量 final 修饰在类上,则表示该类不能被继承,如果里面的成员变量没 ...

最新文章

  1. 收藏:SqlServer
  2. J2SE学习标准篇(转载)
  3. Xcode6的 实时渲染 在storyboard修改自定义属性
  4. 计算机组成原理tec9,(15-16-2)实验1-寄存器-TEC9.docx
  5. [编程入门]猴子吃桃的问题
  6. 赛普拉斯 12864_如何使用赛普拉斯自动化辅助功能测试
  7. dotty编译器语法特性之一交叉类型,联合类型和文本单例类型
  8. Yii2 理解Validator
  9. 2个通用js树型导航
  10. android 7 apk 安装程序,Android安装apk文件并适配Android 7.0详解
  11. UE4_BIM替换材质处理流程
  12. Mysql通过sql添加字段
  13. 【33】t-SNE原理介绍与对手写数字MNIST的可视化结果
  14. guzzle php,PHP HTTP 客户端 - Guzzle
  15. HIVE操作自查手册(全)
  16. Sched: RT throttling activated
  17. 深入产品线的配置管理
  18. Canal的安装与使用(直接食用)--监控数据库binlog日志 实现实时操作
  19. 第二章 五行,金木水火土
  20. 带你了解一下PHP搭建的电商商城系统

热门文章

  1. OC typedef(起别名)
  2. Oracle视图编译错误解决办法
  3. Mysql基于Linux上的安装
  4. JAVA-初步认识-第八章-数组工具类中静态的使用
  5. vue 配置跨域访问
  6. 在线编程 - PyPool小站启动记
  7. File Manager所支持的文件
  8. Htmlunit 使用记录
  9. esp8266 SOC方案经过半年沉淀之后再度重启二
  10. 【luogu P2319 [HNOI2006]超级英雄】 题解