final 实例域+final类+final方法(阻止继承)
来源:互联网 发布:js indexof undefined 编辑:程序博客网 时间:2024/05/18 00:25
【0】README
0.1)本文描述+源代码均 转自 core java volume 1, 旨在理清 “final 实例域”;
0.2) 最后还增加了 阻止继承 的内容,涵盖了final类+final方法;
0.3) 引入了 内联 以及 即时编译器对方法进行内联处理 ;
【1】final相关
1.1) final 大都应用于 基本数据域, 或不可变类的域; final 域被设置后, 不能再对它进行更改, 即没有 setter 更改器方法;
1.2)不可变的类:如果类中的每个方法都不会改变其对象,这种类就是不可变的类;
1.3)对于可变的类: 使用final修饰符可能会对读者造成混乱,如:private final GregorianCalendar entryTime;
Attention)
- A1)这仅仅意味着存储在 entryTime 变量中的对象引用在对象构造后不能被改变, 并不是说 entryTime 对象是一个常量, 任何方法都可以对 entryTime 引用的对 象调用 setTime更改器(注意,这里是 setTime(), 而不是 setEntryTime() ); (也就是说,entryTime 指针只能指向 初始化的 内存地址空间, 虚拟机停止运行前,它不能指向另外的内存地址空间)
- A2)也即是, 对于final的 对象(对象就是引用)变量来讲,它在对象创建的时候, 它所引用的地址是至始至终不会改变的, 但是该引用地址(对象)上的值是可以改变的, 下图中的 setTime 更改了final entryTime 的 日历日期,但是没有改变它的引用地址;
【2】看个荔枝:
【3】阻止继承:final 类 和 方法
3.1)不允许扩展的类被称为final类: 如,
final class Executive extends Manager{ ......}
3.2)类中的方法也可以被声明为final, 那么,子类就不能覆盖这个方法了(final类中的所有方法自动地成为final方法)
class Employee{ ...... public final String getName() { return name; }}
Annotation) 对于final域来说,构造对象后就不允许改变他们的值了,不过如果将一个类声明为final, 只有其中的方法自动地成为final, 而不包括域;
3.3)内联:如果一个方法没有被覆盖并且很短,编译器就能够对它进行优化处理,这个过程就称为内联;如, 内联调用e.getName() 将被替换为 访问 e.name 域;
3.4)即时编译器对方法进行内联处理: 虚拟机中的即时编译器比传统编译器的处理能力强得多, 这个编译器可以准确谁知道类之间的继承关系,并能够检测出类中是否
真正地存在覆盖给定的方法, 如果方法很短,被频繁调用且没有真正地被覆盖,那么即时编译器就会将这个方法进行内联处理;
- final 实例域+final类+final方法(阻止继承)
- 1.阻止继承:final 类和方法
- 终止继承:Final类和Final方法
- 终止继承:Final类和Final方法
- final类和方法(阻止继承) 强制类型转换
- final方法,final类
- Java final 类,final 方法,final变量
- final类与final方法
- final方法、final变量、final类、final对象—Java
- final
- final
- final
- final
- final
- final
- final
- Final
- final
- codeforces-559B-Equivalent Strings
- 10分钟教会你Apache Shiro
- iOS网络编程之JSON简单介绍
- Objective-C:Day5
- 平铺图片被截图时页面卡死2秒钟的问题
- final 实例域+final类+final方法(阻止继承)
- 设置虚拟机可访问本机数据库
- 自然语言处理
- Cloud Design Pattern - CQRS Pattern (读写隔离模式)
- Linux系统中strace命令的使用教程
- Schema约束
- Java加解密——初步认识密码体制
- c# DataTable select 过滤返回新DataTable
- SVN服务器问题汇总