异常是Java的重要组成部分,异常也使得程序的编写与测试变得更加轻松。
什么是异常:
异常我们可以理解为“异于正常”,就是错误,在程序运行过程中出现错误,导致程序出现非预期场景,这些场景通常都是我们不希望出现的。
Java异常机制的优点:
有利于筛查错误:当出现错误时马上就会抛出异常,并且每个异常都有自己专属的名称,大部分异常也会带有有价值的附加信息,同时打印异常时还可以打印堆栈信息,可以快速找到发生异常的代码。
学过C++的同学可能知道C++发生异常时的痛苦,程序崩溃不会有像Java一样的提示信息,只会告诉你类似这样子的东西:
没有经验的话遇到这类异常一定束手无策,完全不知道发生了什么,而Java则避免了这个问题:
Java异常的体系结构:Throwable:Throwable是所有异常/错误的父类
Error:Error类描述的是内部系统错误,例如Java虚拟机崩溃,自Error派生的错误都是虚拟机抛出的,仅靠程序自身无法解决的错误,编写程序时我们不应该通过这个类来编写自己的异常
Exception:所有用户异常的父类,除RuntimeException外自Exception派生的异常都需要使用try-catch进行捕捉
RuntimeException:运行时异常,虽然该异常派生自Exception,但其行为与Exception不同,运行时异常不要求但可以使用try-catch捕捉
抛出异常:
当一个程序发生异常时会怎么样呢?答案是一直向上抛,直到遇到可以处理这个异常的try-catch块或者抛到虚拟机中(抛到虚拟机里的同时也代表程序的结束)。
使用异常的注意事项:
不要使用异常来代替方法的返回值,因为抛出异常是一个很慢的过程。异常是不应该产生的错误,所以大多数虚拟机并没有对异常机制进行很多性能优化,所以返回数据还是老老实实用返回值或者容器吧。
try-catch的新特性:try-with-resources
JDK7以前我们可能需要这么写代码:
但是现在不用了,我们可以直接写成这样子:
是不是方便了很多,当try语句块结束时虚拟机会自动关闭“( )”中的资源。
这里没有说异常的抛出、处理的方法,因为书中和网上这方面讲的很详细,没有什么需要多说的了,如果不清楚的话就自己动手找找资料吧~~~