final从字面翻译来看,有最后的,最终的;  决定性的;  不可更改的等含义,在java里面主要还是“不可改变的”这层意思,不可改变或者不想改变的final主要用在类、方法、数据这三个方面。

一、final类

当我们声明一个类,不想让别人利用这个类来声明子类,就可以把这个类声明为final类。这个类是“断子绝孙”的,也就是不允许被继承,但是它可以继承自其他类。比如:

final class Executive extends Manager

{

… …

}

还有一个典型的final类就是String类,String类没有子类,也就是说,String的引用一定是一个String对象,不可能是其他类的对象。

如果一个类声明为final类,则它的成员方法也都默认是final的,它的成员变量并不受影响。

二、final方法

如果我们声明一个方法,不想让它在子类中被修改,也就是想把这个方法锁定,可以声明为final方法。这样做可以使方法的行为保持不变,不被覆盖。

java的早期版本中,声明final方法还会出于效率的考虑,随着虚拟机的优化,这方面的问题基本不用考虑,一般都是从设计的角度声明final方法。

声明final方法和声明final类的目的基本是一致的,就是不想被改变。比如Calendar类中的getTime和setTime方法都声明为final,这样做的目的就是Calendar类来实现Date类与日历状态之间的转换,不允许别人再用子类处理这个问题。

三、final数据

final数据,简单来说包括两种数据,一种是基本数据,一种是对象引用。

对于final的基本数据,必须在定义的时候就要赋值,并且不能更改。如果这个数据还是static的,那么,它就占据一段不能更改的存储空间,按照java规范,这样的常量用大写表示,并用下划线分隔各个单词。

对于final的对象引用,final使得引用恒定不变,也就是说这个引用指向了一个对象,它就不能再指向其他对象了,但是,这个对象的内容却是可以更改的。java并没有提供一个让对象恒定不变的途径。

以上内容是参考java编程思想和java核心技术卷I两本巨著整理,有不合适的地方,请大家指正。

java中final的用法的更多相关文章

  1. Java中final的用法总结

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

  2. java 中 final 的用法

    /* final可以修饰类,方法,变量 特点: final可以修饰类,该类不能被继承. final可以修饰方法,该方法不能被重写.(覆盖,复写) final可以修饰变量,该变量不能被重新赋值.因为这个 ...

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

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

  4. Java中final修饰符深入研究

    一.开篇 本博客来自:http://www.cnblogs.com/yuananyun/ final修饰符是Java中比较简单常用的修饰符,同时也是一个被"误解"较多的修饰符.对很 ...

  5. 【Java面试题系列】:Java中final finally finalize的区别

    本篇为[Java面试题系列]第三篇,文中如有错误,欢迎指正. 第一篇链接:[Java面试题系列]:Java基础知识常见面试题汇总 第一篇 第二篇链接:[Java面试题系列]:Java基础知识常见面试题 ...

  6. Java中final的作用

    Java中Final可以被用于变量,方法,类.具体来说: 1, Final 变量 修饰主类型时,制定变量为常数,不希望被改变 修饰类类型时,表示变量的句柄不变,不能被指定指向新的变量 修饰参数时,参数 ...

  7. java中this的用法?

    2008-07-28 08:10cztx5479 | 分类:JAVA相关 | 浏览4533次 java中this的用法? import java.awt.*; import java.awt.even ...

  8. 深刻理解Java中final的作用(一):从final的作用剖析String被设计成不可变类的深层原因

    声明:本博客为原创博客,未经同意,不得转载!小伙伴们假设是在别的地方看到的话,建议还是来csdn上看吧(原文链接为http://blog.csdn.net/bettarwang/article/det ...

  9. 转:十八、java中this的用法

    http://blog.csdn.net/liujun13579/article/details/7732443 我知道很多朋友都和我一样:在JAVA程序中似乎经常见到“this”,自己也偶尔用到它, ...

随机推荐

  1. 【NYOJ-187】快速查找素数—— 枚举法、筛选法、打表法

    快速查找素数 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 现在给你一个正整数N,要你快速的找出在2.....N这些数里面所有的素数. 输入 给出一个正整数数N(N ...

  2. Android MVPR 架构模式

    最近我在尝试让 Google 的 IO App 变得可单元测试,我这样做的其中一个原因是验证 Freeman 和 Pryce 在引用中对单元测试的总结.即使现在我还是没有把 IOSched 中的任何一 ...

  3. LruCache--远程图片获取与本地缓存

    Class Overview A cache that holds strong references to a limited number of values. Each time a value ...

  4. ASP.NET 使用application和session对象写的简单聊天室程序

    ASP.Net中有两个重要的对象,一个是application对象,一个是session对象. Application:记录应用程序参数的对象,该对象用于共享应用程序级信息. Session:记录浏览 ...

  5. 小数点输出精度控制问题 .xml

    pre{ line-height:1; color:#9f1d66; background-color:#d2d2d2; font-size:16px;}.sysFunc{color:#5d57ff; ...

  6. linux下安装filezilla客户端遇到的问题

    访问filezilla ./filezilla 出现error while loading shared libraries : libpng12.so.o 缺少libpng12.so.o这个文件 解 ...

  7. 设计模式 策略-Strategy,装饰-Decorator,观察者-Observer

    重温了Head First 3个设计模式.提炼一下思想,笔记如下. 策略-Strategy 当一个类或类族中重复实现某些同类的方法(behavior)时,考虑使用策略模式. 该模式是将Behavior ...

  8. macos+apache+php+phpmyadmin 的整合过程梳理

    启动Apache 有两种方法: 打开“系统设置偏好(System Preferences)” -> “共享(Sharing)” -> “Web共享(Web Sharing)”. 打开“终端 ...

  9. 以Akka为示例,介绍Actor模型

    许多开发者在创建和维护多线程应用程序时经历过各种各样的问题,他们希望能在一个更高层次的抽象上进行工作,以避免直接和线程与锁打交道.为了帮助这些开发者,Arun Manivannan编写了一系列的博客帖 ...

  10. 轻松学习Linux之进程监视与管理

    前后台进程转换-1 前后台进程转换-2 本文出自 "李晨光原创技术博客" 博客,谢绝转载!