面向对象编程(十二)——final关键字
final关键字
Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类、非抽象类成员方法和变量。
在Java中,final关键字可以用来修饰类、方法和变量(包括成员变量和局部变量)。
final修饰变量
- final修饰变量:该变量变成常量
对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。
上面的一段代码中,对变量i和obj的重新赋值都报错了。
final修饰方法
- final修饰方法:该方法不能被子类重写,但可以被重载!
如果一个类不允许其子类覆盖某个方法,则可以把这个方法声明为final方法。
使用final方法的原因有二:
第一、把方法锁定,防止任何继承类修改它的意义和实现。
第二、高效。编译器在遇到调用final方法时候会转入内嵌机制,大大提高执行效率。
final修饰类
- final修饰类:final修饰类则说明:这个类不能被继承!不能有子类。比如:String,Math.
Math类:
String类:
当用final修饰一个类时,表明这个类不能被继承。也就是说,如果一个类你永远不会让他被继承,就可以用final进行修饰。final类中的成员变量可以根据需要设为final,但是要注意final类中的所有成员方法都会被隐式地指定为final方法。
在使用final修饰类的时候,要注意谨慎选择,除非这个类真的在以后不会用来继承或者出于安全的考虑,尽量不要将类设计为final类。
Final && Static
static和final一块用表示什么 ?
static final用来修饰成员变量和成员方法,可简单理解为“全局常量”!
对于变量,表示一旦给值就不可修改,并且通过类名可以访问。
对于方法,表示不可覆盖,并且可以通过类名直接访问。
总结
JAVA中final 与 static 总结 | ||
final | static | |
修饰类 | 该类不可被继承 | 只能修饰内部类,该类不需要new,是静态加载(嵌套顶层类) |
修饰接口 | × | × |
修饰构造函数 | × | × |
修饰语句块 | × | 虚拟机按声明顺序初始化static成员字段和static语句块 |
修饰字段属性 | 表示属性初始化后不能修改(实例常量) | 是类变量,所有实例共享该变量值(类变量) |
在定义时或构造函数中赋值(每个实例拥有一份拷贝) | ||
修饰方法 | 该方法不能被覆盖(只可继承) | 是类方法,所有实例共享该方法(类方法) |
修饰函数参数 | 参数值不能被函数修改 | × |
修饰函数局部变量 | 局部变量初始化后不能修改(局部常量) | × |
用途 | 1).为了防止方法被覆盖或改写; | 1).定义全局变量或常量; |
2).提高运行效率,JAVA对final方法调用采用内嵌机制; | 2).定义类方法; | |
二、JAVA类加载顺序 | ||
JAVA类加载顺序: | 1).按代码顺序递归加载静态成员/代码块,先父类再本类; | |
2).按代码顺序递归加载非静态成员/代码块,先父类再本类; | ||
3).按代码顺序递归调用构造函数,先父类再本类; | ||
JAVA类加载时机: | 1).调用静态成员时,加载静态成员所在的类及父类; | |
2).第一次new对象时加载(第二次new不再加载) | ||
3).加载子类会先加载父类.有static和final修饰的成员不会被加载;当成常量使用; |
参考文章:
面向对象编程(十二)——final关键字的更多相关文章
- Javascript面向对象编程(二):构造函数的继承 作者:yuan一峰
Javascript面向对象编程(二):构造函数的继承 作者: 阮一峰 日期: 2010年5月23日 这个系列的第一部分,主要介绍了如何"封装"数据和方法,以及如何从原型对象生 ...
- js面向对象编程(二)构造函数的继承(转载)
Javascript面向对象编程(二):构造函数的继承 这个系列的第一部分,主要介绍了如何"封装"数据和方法,以及如何从原型对象生成实例. 今天要介绍的是,对象之间的"继 ...
- JavaScript 面向对象编程(二):继承
Javascript面向对象编程(二):构造函数的继承 这个系列的第一部分,主要介绍了如何"封装"数据和方法,以及如何从原型对象生成实例. 今天要介绍的是,对象之间的"继 ...
- 【Java学习笔记之二十】final关键字在Java继承中的用法小结
谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字.另外,Java中的String类就是一个final类,那么今天我们就来了解final这个关键字的用法. ...
- 面向对象编程(十)——继承之Super关键字及内存分析
Super关键字
- JavaScript面向对象编程(二)构造函数和类
new关键字和构造函数 在文章JavaScript面向对象编程(一)原型与继承中讨论啦JavaScript中原型的概念,并且提到了new关键字和构造函数.利用new关键字构造对象的实例代码如下: // ...
- python 面向对象编程(二)
在上一篇文章中谈到了类的基本定义和使用方法,这只体现了面向对象编程的三大特点之一:封装. 下面就来了解一下另外两大特征:继承和多态. 在Python中,如果需要的话,可以让一个类去继承一个类,被继承的 ...
- Python学习之==>面向对象编程(二)
一.类的特殊成员 我们在Python学习之==>面向对象编程(一)中已经介绍过了构造方法和析构方法,构造方法是在实例化时自动执行的方法,而析构方法是在实例被销毁的时候被执行,Python类成员中 ...
- javascript 学习笔记之面向对象编程(二):继承&多态
~~接上篇~~上一篇实现了类的实现以及类成员变量和方法的定义,下面我们来了解下面向对象中两个最重要的特性:继承和多态. 继承 js中同样可以实现类的继承这一面向对象特性,继承父类中的所有成员(变量和属 ...
随机推荐
- Eclipse代码提示功能是不是利用反射
希望看到这个空文章的你能够说说你的意见………………
- 找到n中最小的k个数
题目:n个数中,求最小的前k个数. 这道题在各个地方都看到过,在国内出现的频率也非常高. 面完阿里回来听说这道题又被考了,所以还是决定回来写一写,对于这种高频题...顺便再吐槽一下阿里的面试,我竟然一 ...
- CSS3 3D Transform
CSS3 3D Transform 原文:http://www.w3cplus.com/css3/css3-3d-transform.html 三维变换使用基于二维变换的相同属性,如果您熟悉二维变换, ...
- HTML5:离线存储(缓存机制)-IndexDB
https://www.w3.org/TR/IndexedDB/ .. <!DOCTYPE html> <html> <head> <meta charset ...
- CSS权威指南 - 基本视觉格式化 1
定位 定位的想法很简单元素框相对于正常位置出现在哪里. 定位:static,相对, 绝对, fixed, 继承 static就是默认的位置 相对就是相对于默认位置的偏移.原来的static定位位置依然 ...
- Redis 笔记与总结4 set 和 zset 类型
(一)set 类型 set 是集合是 string 类型的无序集合. set 元素最大可以包含(2 的 32 次方)个元素.set 的是通过 hash table 实现的,所以添加.删除和查找的复杂度 ...
- sortedArrayUsingComparator
/* 升序.降序 */ NSArray * array41 = @[@,@,@,@,@,@,@]; NSArray * array42 = [[NSArray alloc]init]; array42 ...
- [转自小兵的工具箱]C++ Builder 基础
1. C++ Builder 网上资源 C++ Builder 研究 http://www.ccrun.com/ C++ Builder 程序员 http://mybcb.diy.myri ...
- 【转】android UI进阶之自定义组合控件
[源地址]http://blog.csdn.net/notice520/article/details/6667827 好久没写博客了.实在是忙不过来,不过再不总结总结真的不行了.慢慢来吧,有好多需要 ...
- SQLQuery 实现别名映射
public List getQueryList(Map paramMap, int start, int maxResults) throws DataAccessException, Hibern ...