java中final的用法
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的用法的更多相关文章
- Java中final的用法总结
1. 修饰基础数据成员的final 这是final的主要用途,其含义相当于C/C++的const,即该成员被修饰为常量,意味着不可修改.如java.lang.Math类中的PI和E是f ...
- java 中 final 的用法
/* final可以修饰类,方法,变量 特点: final可以修饰类,该类不能被继承. final可以修饰方法,该方法不能被重写.(覆盖,复写) final可以修饰变量,该变量不能被重新赋值.因为这个 ...
- 转 Java中final、finally、finalize的区别与用法
Java中final.finally.finalize的区别与用法 1.简单区别:final用于声明属性,方法和类,分别表示属性不可交变,方法不可覆盖,类不可继承.finally是异常处理语句结构 ...
- Java中final修饰符深入研究
一.开篇 本博客来自:http://www.cnblogs.com/yuananyun/ final修饰符是Java中比较简单常用的修饰符,同时也是一个被"误解"较多的修饰符.对很 ...
- 【Java面试题系列】:Java中final finally finalize的区别
本篇为[Java面试题系列]第三篇,文中如有错误,欢迎指正. 第一篇链接:[Java面试题系列]:Java基础知识常见面试题汇总 第一篇 第二篇链接:[Java面试题系列]:Java基础知识常见面试题 ...
- Java中final的作用
Java中Final可以被用于变量,方法,类.具体来说: 1, Final 变量 修饰主类型时,制定变量为常数,不希望被改变 修饰类类型时,表示变量的句柄不变,不能被指定指向新的变量 修饰参数时,参数 ...
- java中this的用法?
2008-07-28 08:10cztx5479 | 分类:JAVA相关 | 浏览4533次 java中this的用法? import java.awt.*; import java.awt.even ...
- 深刻理解Java中final的作用(一):从final的作用剖析String被设计成不可变类的深层原因
声明:本博客为原创博客,未经同意,不得转载!小伙伴们假设是在别的地方看到的话,建议还是来csdn上看吧(原文链接为http://blog.csdn.net/bettarwang/article/det ...
- 转:十八、java中this的用法
http://blog.csdn.net/liujun13579/article/details/7732443 我知道很多朋友都和我一样:在JAVA程序中似乎经常见到“this”,自己也偶尔用到它, ...
随机推荐
- 将UE添加到右键菜单
1.新建UE.reg文件,将如下代码拷贝进去.注意UE安装路径 Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT*shell] [HK ...
- JBPM4入门——9.自动节点单线执行
JBPM入门系列文章: JBPM4入门——1.jbpm简要介绍 JBPM4入门——2.在eclipse中安装绘制jbpm流程图的插件 JBPM4入门——3.JBPM4开发环境的搭建 JBPM4入门—— ...
- wc命令--Linux统计文件行数
语法:wc [选项] 文件… 说明:该命令统计给定文件中的字节数.字数.行数.如果没有给出文件名,则从标准输入读取.wc同时也给出所有指定文件的总统计数.字是由空格字符区分开的最大字符串. 该命令各选 ...
- win 7 下Maven环境的搭建
Apache Maven,是一个软件(特别是Java软件)项目管理及自动构建工具. Maven是什么? 比较正式的定义:Maven是一个项目管理工具,它包含了: 一个项目对象模型 (Project O ...
- OSX 10.10安装教程。
现在苹果已经放出了OS X 10.9 Mavericks第一个开发者预览版,从Mac App Store中获得的安装程序,可以在10.8的系统中直接进行升级,原有文件都会保留.但是要想制作成一个10. ...
- db file sequential read (数据文件顺序读取)
转载:http://www.dbtan.com/2010/04/db-file-sequential-read.html db file sequential read (数据文件顺序读取): db ...
- STM32 UART 重映射
在进行原理图设计的时候发现管脚的分配之间有冲突,需要对管脚进行重映射,在手册中了解到STM32 上有很多I/O口,也有很多的内置外设像:I2C,ADC,ISP,USART等 ,为了节省引出管脚,这些内 ...
- strcpy基本用法
C语言标准库函数strcpy,把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间. C语言函数 原型声明:extern char *strcpy(char* dest, co ...
- IIS7 503错误 Service Unavailable
把相应的Application Pools的process model的Identity属性设置成“LocalSystem”就OK了
- 深入剖析AutoreleasePool
[深入剖析AutoreleasePool] Objc的AutoreleasePool是一个首尾相连的内存链接,每块大小为1页(32位机上为4kb). 上面可以看到,parent指向父Pool,chil ...