前言

Java中引用是一个最常用的Object,我们有必要对它有一个基本的理解。而且引用通常出现在一本Java书的开头,这导致,几乎没有Java书敢详细地叙述关于引用的复杂机制。本文剖析了Java的四种引用。

注意,理解这四种引用需要明白:什么是对象,什么是引用。一定注意叙述中的“对象”和“引用”。

本文没有涵盖的内容:

  1. JVM内存管理。
  2. 参数传递过程
  3. 引用的生存周期和finalize()方法
  4. 软引用和弱引用的应用
  5. 常量池中的符号引用

引用和内存管理、参数传递过程都有密切的关系,本文并不探讨引用的引用计数算法、可达性分析等涉及过多内存管理的内容,也不探讨参数传递过程,以免顾此失彼,用力不均。
至于引用的生存周期和finalize()方法,限于篇幅,也不讲解。感兴趣的读者可以见参考文献5。
对软引用和弱引用的应用感兴趣的读者见参考文献4。

如果想深入了解Java的参数传递过程,戳:TBC。

什么是对象

对象是类的实例。
Person person = new Person("张三");
这里new出来(等号右边)的就是一个对象。

什么是引用(reference)

还是刚刚的代码为例
Person person = new Person("张Read the rest

前言

本文略去的内容:

  • Java异常简介
    Java异常是Java提供的一种识别及响应错误的机制。
  • 异常处理的基本语法
    try…catch…finally和throw、throws。

这些内容几乎在每一篇参考文献中都有详细的讲解。如果你想先了解关于异常的基础知识,随便挑一篇看就好,它们都是优秀的文章(虽然有的细枝末节存在错误,这也是本文存在的原因之一)。

另外一个原因就是,我想写一个足够全面的总结。

在这里,我先明确一下“处理异常”这个词的意思。它指的是:要么用try-catch捕获处理,要么throws。当然,最好避免直接throws,而是声明throws后依然catch,最后再throw。

Java异常的分类

Java异常的类间关系

Java exception class relationship

  1. Throwable
    Throwable是Java语言中所有错误或异常的超类,它有两个直接子类Error / Exception。
    只有当对象是此类(或其子类之一)的实例时,才能通过 Java虚拟机或者throw语句抛出。类似地,只有此类或其子类之一才可以是catch子句中的参数类型。
    Throwable包含了其线程创建时线程执行堆栈的快照,
Read the rest