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. Java中HashMap的数据结构

    类声明: 概述: 线程不安全: <Key, Value>两者都可以为null: 不保证映射的顺序,特别是它不保证该顺序恒久不变: HashMap使用Iterator: HashMap中ha ...

  2. 高新服务平台在SUSE系统上重新部署笔录

    安装步骤     ./shutdown.sh 停止tomcat (1) 删除 zjgx 目录下 除bbs 和Demos所有目录和文件 (2)上传zjgx0519.zip 到zjgx目录下 (3)unz ...

  3. php查询汉字的拼音首字母的函数

    function getfirst($str, $charset='utf8'){         $dict=array(         'a'=>0xB0C4,         'b'=& ...

  4. Linux makefile教程之书写命令四[转]

    书写命令———— 每 条规则中的命令和操作系统Shell的命令行是一致的.make会一按顺序一条一条的执行命令,每条命令的开头必须以[Tab]键开头,除非,命令是紧跟 在依赖规则后面的分号后的.在命令 ...

  5. 开发框架XUtils

    xUtils 包含了很多实用的android工具. xUtils 最初源于Afinal框架,进行了大量重构,使得xUtils支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的O ...

  6. delphi TeeChart保存3种图片文件

    var vForm: Tfrm_ChemaShowMainChild;begin vForm := GetActiveForm; vForm.cht_Edit.SaveToMetafile('C:\1 ...

  7. php sortable 动态排序

    php sortable 动态排序未分页版.php 预览图: <?php mysql_connect("localhost","root","r ...

  8. Vs2015 win10虚拟机启动问题:无法设置UDP端口 解决方法 合集(转载)

    刚装的vs2015 社区版 出现这个问题,wp8.1和win10m模拟器都无法启动,找了好久找到的解决方案,放这儿供大家参考,免得大家像我一样走弯路: Windows Phone emulator n ...

  9. 求相同号码一天内的上网流量——mapreduce

    上网数据 1363157985066 13726230503 00-FD-07-A4-72-B8:CMCC 120.196.100.82 i02.c.aliimg.com 24 27 2481 246 ...

  10. Python中的并发编程

    简介 我们将一个正在运行的程序称为进程.每个进程都有它自己的系统状态,包含内存状态.打开文件列表.追踪指令执行情况的程序指针以及一个保存局部变量的调用栈.通常情况下,一个进程依照一个单序列控制流顺序执 ...