1.异常栈信息包括了从异常发生点到最上层调用者的轨迹,还包括行号,可以说,这个栈信息是分析异常最为重要的信息。

2.Java默认的异常处理机制:打印异常栈,退出程序(非正常退出),异常发生点之后的代码都不会执行。

3.return和throw的对比:

  • return是正常退出,throw是异常退出;
  • return的返回位置是确定的,就是上一级调用者,而throw后执行哪行代码则经常是不确定的,由异常处理机制动态决定。

4.常见的RuntimeException:

异常 说明
NullPointerException 空指针异常
IllegalStateException 非法状态
ClassCastException 非法强制类型转换
IllegalArgumentException 参数错误
NumberFormatException 数字格式错误
IndexOutOfBoundsException 索引越界
ArrayIndexOutOfBoundsException 数组索引越界
StringIndexOutOfBoundsException 字符串索引越界

5.如此多的的异常类其实并没有比Throwable这个父类多多少属性和方法,大部分类异常在继承了父类以后只是定义了几个构造方法,这些构造方法也只是调用了父类的构造方法,没有什么额外的操作。
然而,定义如此多的的异常类的原因是:为了让名字不同。
异常类的名字本身就代表了异常的关键信息,无论是抛出还是捕获异常,使用合适的名字都有助于代码的可读性和可维护性。

6.checked Exception和unchecked Exception
unchecked Exception:RuntimeException + Error
checked Exception:Exception
checked Exception和unchecked Exception的区别在于Java自身如何处理这两种异常。
遇到前者,Java会强制要求程序员处理,否则会有CE;
而遇到后者,Java没有这个要求。

7.这样的代码也是可以的(JDK7+)

try {//操作代码
} catch (ExceptionA | ExceptionB e) {//异常处理
}

这样可以一次统一处理多个异常(但是要慎重考虑,并且不建议catch All)

8.继承自Exception的子类属于checked Exception;继承自RuntimeException的子类属于unchecked Exception。

9.Java7+支持一种try-with-resources的结构,其实是省却了finally语句块或者手动关闭的麻烦,可以实现“自动关闭资源”。这种语法针对实现了java.lang.AutoCloseable接口的对象。
java.lang.AutoCloseable接口的定义:

public interface AutoCloseable {void close() throws Exception;
}

资源可以定义多个,用分号(注意,是分号是分号是分号,不是逗号不是逗号不是逗号~~~)。
Java9-的时期,资源必须声明和初始化在try语句块内,而Java9允许资源在try块外初始化但是必须是final的或者事实上是final的(虽然没被声明为final但也不能重新赋值)。

【Java】《Java编程的逻辑》第6章 异常 笔记+感悟分享相关推荐

  1. 【Java并发编程的艺术】第二章读书笔记之原子操作

    前言 今天的笔记来了解一下原子操作以及Java中如何实现原子操作. 概念 原子(atomic)本意是"不能被进一步分割的最小粒子",而原子操作(atomic operation)意 ...

  2. 《Java面向对象编程(阿里云大学)》笔记(文档+思维导图)

    课程链接:https://edu.aliyun.com/course/1011 (还是建议去看课程,笔记仅供参考. 由于文中的所有内容均为手敲,并且有些代码并未验证,因此如有错误,烦请指出~ 谢谢~~ ...

  3. 【Java】《Java编程的逻辑》第4章 类的继承 笔记+感悟分享

    1.继承可以复用代码,公共的属性和行为可以放到父类中,而子类只需要关注子类特有的就可以了:另一方面,不同子类的对象可以更方便的被统一管理. 2.super可以引用父类非私有的变量. (这句话对于Jav ...

  4. 【Java】《Java编程的逻辑》第3章 类的基础 笔记+感悟分享

    1.通过类实现自定义的数据类型,封装该类型的数据所具有的的属性和操作,隐藏实现细节,从而在更高的层次(类和对象层次,而非基本数据类型和函数类型的层次)上考虑和操作数据,是计算机程序解决复杂问题的一种重 ...

  5. 《java并发编程实战》第11章-性能与可伸缩性

    11.1 对性能的思考 11.1.1 性能的提升意味着什么 提升性能意味着用更少的资源做更多的事情, 在任何时刻,提升性能的前提是要保证程序的正确性 当操作由于某种特定的资源而受到限制时,通常就称该操 ...

  6. 《java多线程编程实战指南 核心篇》读书笔记一

    1. run方法是线程的任务处理逻辑的入口方法,它由java虚拟机在运行相应线程时直接调用,而不是由应用代码进行调用. 2. 启动一个线程的实质是请求java虚拟机运行相应的线程,而这个线程具体何时能 ...

  7. 《Java从入门到精通》第九章学习笔记

    第9章 类的高级特性 一.抽象类 抽象类只声明方法的存在,不能被实例化,就是说抽象类不能创建其对象,在定义抽象类时要在class前面加上abstract关键字. 1 /*定义一个抽象类Fruit,并定 ...

  8. 《java多线程编程实战指南 核心篇》读书笔记二

    1. 竞态 对于同样的输入,程序的输出有时候正确而有时候却是错误的.这种一个计算结果的正确性与时间有关的现象就被称为竞态(RaceCondition) 导致竞态的常见原因是多个线程在没有采取任何措施的 ...

  9. 《java多线程编程实战指南 核心篇》读书笔记三

    1. 锁的思路: 将多个线程对共享数据的并发访问转换为串行访问,即一个共享数据一次只能被一个线程访问,该线程访问结束后其他线程才能对其进行访问.锁(lock)就是利用这种思路以保障线程安全的线程同步机 ...

最新文章

  1. Spring Boot 2.0 热部署指南
  2. css3.0动画,CSS3.0实现霓虹灯按钮动画特效的示例代码
  3. C# hashtable
  4. 想了解概率图模型?你要先理解图论的基本定义与形式
  5. ios进度条Demo一个
  6. 联动下拉框显示省市县
  7. jQueryUI modal dialog does not show close button (x) JQueryUI和BootStrap混用时候,右上角关闭按钮显示不出图标的解决办法...
  8. 用正则表达式输出rdf文档的三元组格式数据
  9. python免费课程400节-太原Python编程课哪家比较有优势
  10. css中的.clearfix是什么意思?
  11. 机器学习- 吴恩达Andrew Ng Week9 知识总结 Recommender Systems
  12. Linux安装GIMP
  13. H3CSE园区-VLAN配置
  14. 思维导图制作工具BLUMIND 小巧免激活 免安装 仅2M
  15. 画出计算机网络中两级子网,计算机网络基础练习题
  16. fetch bulk collect limt 学习
  17. 这是一篇转载:HOG特征(这是我看到过的讲的最适合我的博客)
  18. maven核心,pom.xml详解
  19. 超实用!Python机器学习书籍推荐——《Python神经网络编程》(一定要看到最后)
  20. jbpm工作流动态会签

热门文章

  1. Experimental-work1
  2. SpingMVC 执行的流程
  3. 包的引入(base版本)
  4. 支付宝 报错 rsa_private read error : private key is NULL解决方法
  5. lucene 高亮显示
  6. FileInputStreamTest
  7. mac远程桌面登陆windows
  8. 岗位po是什么意思_劳务派遣是什么意思,劳务派遣和正式员工区别在哪
  9. 零窗口探测怎么抓包_万事俱备,只待“窗口”!航天任务中的重要环节:“发射窗口”!...
  10. vue 同级页面调用方法_【Vue】一个vue页面调用另一个vue页面中的方法