文化网站模板,招商外包公司排名,济南做网站个人,国内网站建设 必须实名认证【0】README
0.1#xff09;本文描述源代码均 转自 core java volume 1#xff0c; 旨在理清 “final 实例域”#xff1b; 0.2#xff09; 最后还增加了 阻止继承 的内容#xff0c;涵盖了final类final方法#xff1b; 0.3#xff09; 引入了 内联 以及 即时编译器对…【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即时编译器对方法进行内联处理 虚拟机中的即时编译器比传统编译器的处理能力强得多 这个编译器可以准确谁知道类之间的继承关系并能够检测出类中是否 真正地存在覆盖给定的方法 如果方法很短被频繁调用且没有真正地被覆盖那么即时编译器就会将这个方法进行内联处理