一、final

1.final修饰方法时,需要注意的点:

  #final修饰方法时,之前的第二个原因是效率。但是如果方法过于庞大,可能看不到内嵌调用带来的任何性能提升。在最近的Java版本中,不需要使用final方法进行这些优化了。“

  #因此,如果只有在想明确禁止 该方法在子类中被覆盖的情况下才将方法设置为final的。即父类的final方法是不能被子类所覆盖的,也就是说子类是不能够存在和父类一模一样的方法的

  #要注意的一点是:因为重写的前提是子类可以从父类中继承此方法,如果父类中final修饰的方法同时访问控制权限为private,将会导致子类中不能直接继承到此方法,因此,此时可以在子类中定义相同的方法名和参数,此时不再产生重写与final的矛盾,而是在子类中重新定义了新的方法。(注:类的private方法会隐式地被指定为final方法。),参考如下代码:

public class B extends A {

    public static void main(String[] args) {

    }

    public void getName() {

    }
} class A { /**
* 因为private修饰,子类中不能继承到此方法,因此,子类中的getName方法是重新定义的、
* 属于子类本身的方法,编译正常
*/
private final void getName() { } /* 因为pblic修饰,子类可以继承到此方法,导致重写了父类的final方法,编译出错
public final void getName() { }
*/
}

2.修饰变量时需要注意点

  #  final成员变量表示常量,只能被赋值一次,赋值后值不再改变。

  # 如果final修饰一个引用类型时,则在对其初始化之后便不能再让其指向其他对象了,但该引用所指向的对象的内容是可以发生变化的。

  # final修饰一个成员变量(属性),必须要显示初始化。这里有两种初始化方式

  # 当函数的参数类型声明为final时,说明该参数是只读型的。即你可以读取使用该参数,但是无法改变该参数的值。

  # 掌握点:类的final变量和普通变量有什么区别?见参考链接

    * 优化问题:编译时和运行时获取final的修饰的值

  # 掌握点:被final修饰的引用变量指向的对象内容可变吗?

    *changeValue方法中的参数i用final修饰之后,就不能在方法中更改变量i的值了。

    *值传递问题

参考:https://www.cnblogs.com/xiaoxi/p/6392154.html    http://tryenough.com/javabase#

二、finally

  

  # 需要关闭的连接等资源,更推荐使用Java7中添加的try-with-resources语句,因为通常Java平台能够更好地处理异常情况,编码也要少很少

  # 当一个外部资源的句柄对象实现了AutoCloseable接口,JDK7中便可以利用try-with-resource语法更优雅的关闭资源,消除板式代码。

  # try-with-resource时,如果对外部资源的处理和对外部资源的关闭均遭遇了异常,“关闭异常”将被抑制,“处理异常”将被抛出,但“关闭异常”并没有丢失,而是存放在“处理异常”的被抑制的异常列表中。

参考连接:https://www.cnblogs.com/itZhy/p/7636615.html     https://www.cnblogs.com/hihtml5/p/6505317.html

三、finalize

  # finilize被设计成在对象被垃圾收集前调用,这意味着实现了finalize方法的对象是个“特殊公民”,finlize的执行是和垃圾收集关联在一起的,一旦实现了非空的finalize方法,就会导致相应对象回收呈现数量级上的变慢。finalize本质上成为了快速回收的阻碍者

  # 不要让finalize去承担资源释放的主要职责,最多让finalize作为最后的“守门员”。所以,推荐资源用完即显式释放,或者利用资源池来尽量重用

  # java平台目前在逐步使用java.lang.ref.Cleaner来替换掉原来的finalize实现,Cleaner的实现利用了幻象引用。但同样不能完全依赖Cleaner进行资源回收,防止幻象引用堆积

Java核心技术36讲----------谈谈final、finally、finalize有什么不同的更多相关文章

  1. java核心技术-(总结自杨晓峰-java核心技术36讲)

    1. 谈谈你对java平台的理解 首先是java最显著的两个特性,一次写入处处运行:还有垃圾收集器gc,gc能够对java内存进行管理回收,程序员不需要关心内存的分配和回收问题 然后谈谈jre和jdk ...

  2. 《java核心技术36讲》学习笔记-------杨晓峰(极客时间)

    非常荣幸作为晓峰哥的同事,之前就看过这篇文章,重写读一遍,再学习学习. 一.开篇词 初级.中级:java和计算机科学基础.开源框架的使用:高级.专家:java io/nio.并发.虚拟机.底层源码.分 ...

  3. java核心技术36讲笔记

    Java-Basic 谈谈final. finally. finalize有什么不同? 典型回答: final可以用来修饰类.方法.变量,分别有不同的意义, final修饰的class代表不可以继承扩 ...

  4. 《Java核心技术36讲》阅读笔记:谈谈对Java平台的理解笔记

    1. 谈谈你对Java平台的理解. Java是一种面向对象的语言,最显著的特性有两个方面: 一个就是一次编译,到处运行(Write once, run anywhere),能够非常容易的获得跨平台能力 ...

  5. 《Java核心技术36讲》阅读笔记:Exception和Error有什么区别?

    1.Exception 和 Error有什么区别?运行时异常与一般异常有什么区别? Exception和Error都继承自java.lang.Throwable.在Java中只有Throwable的实 ...

  6. java核心技术36讲

    https://time.geekbang.org/column/intro/82?utm_source=website&utm_medium=infoq&utm_campaign=8 ...

  7. Java核心技术36讲----------Exception和Error有什么区别

    1.异常知识点学习实例 代码如下: package fromnet; /** * 参考链接:https://blog.csdn.net/qq_18505715/article/details/7319 ...

  8. 谈谈 final finally finalize 区别

    声明 本篇所涉及的提问,正文的知识点,全都来自于杨晓峰的<Java核心技术36讲>,当然,我并不会全文照搬过来,毕竟这是付费的课程,应该会涉及到侵权之类的问题. 所以,本篇正文中的知识点, ...

  9. 第36讲 谈谈MySQL支持的事务隔离级别,以及悲观锁和乐观锁的原理和应用场景

    在日常开发中,尤其是业务开发,少不了利用 Java 对数据库进行基本的增删改查等数据操作,这也是 Java 工程师的必备技能之一.做好数据操作,不仅仅需要对 Java 语言相关框架的掌握,更需要对各种 ...

随机推荐

  1. LeetCode--Combination Sum --ZZ

    http://blog.csdn.net/linhuanmars/article/details/20828631 这个题是一个NP问题,方法仍然是N-Queens中介绍的套路.基本思路是先排好序,然 ...

  2. 24点-code1

    #include <iostream> #include <string> #include <cstdlib> #include <cmath> us ...

  3. python+selenium之框架设计

    一.自动化测试框架 1.什么是自动化测试框架 简单来说,自动化测试框架就是由一些标准,协议,规则组成,提供脚本运行的环境.自动化测试框架能够提供很多便利给用户高效完成一些事情,例如,结构清晰开发脚本, ...

  4. coder/programmer engineer Chirf Technology Offcer

    大概是某个C轮融资的医疗网站CTO被离职.而CTO是一个知乎大V和微信大号.此事一出,在微信群有支持也有反对之声.支持此CTO被离职的认为其在工作时没有Review程序,自己不写代码,而是热衷出没于技 ...

  5. 线程 Z

    原文:http://www.albahari.com/threading/part5.aspx 专题:C#中的多线程 1并行编程Permalink 在这一部分,我们讨论 Framework 4.0 加 ...

  6. php 汉字转拼音函数

    function Pinyin($_String, $_Code='UTF8'){ //GBK页面可改为gb2312,其他随意填写为UTF8 $_DataKey = "a|ai|an|ang ...

  7. ZT 设计模式六大原则(6):开闭原则

    ZT 设计模式六大原则(6):开闭原则 分类: 设计模式 2012-02-27 08:48 24870人阅读 评论(72) 收藏 举报 设计模式扩展框架编程测试 定义:一个软件实体如类.模块和函数应该 ...

  8. Docker技术三大要点:cgroup, namespace和unionFS的理解

    www.docker.com的网页有这样一张有意思的动画: 从这张gif图片,我们不难看出Docker网站想传达这样一条信息, 使用Docker加速了build,ship和run的过程. Docker ...

  9. 如何使用Excel选择整列排序

    在excel中,排序的时候弹窗提示“若要执行此操作,所有合并单元格需大小相同”,该怎么操作才能实现排序呢?接下来,小编就和大家分享具体操作.   工具/原料   excel 方法/步骤     打开出 ...

  10. FBKVOController代码阅读

    功能:对kvo机制进行封装,简化使用,简化内存管理: 要素:观察者.被观察者.处理函数. 模式:注册表模式: 机制:对象创建.注册管理.内存管理.处理机制转换: 其它:注册去重: kvo的管理机制: