java中的异常机制
异常处理机制是Java语言中一大特点,相比于其他语言,Java在这一方面具有优势,异常处理机制能帮助程序更好的运作,代码具有更良好的阅读性。而异常处理的任务就是就是将控制权从错误产生的地方转移给能处理这种情况的错误处理器。为了能够在程序中处理异常情况,我们必须知道程序中可能会出现的错误和问题,以及哪类问题需要关注。
- 用户输入错误
- 设备错误
- 物理限制
- 代码错误
异常的体系结构
- 由上图我们可知,所以异常都是有Throwable继承下来的,它的第二次分为:Error和Exception
- Error:是指 java 运行时系统的内部错误和资源耗尽错误。应用程序不会抛出该类对象。如果出现了这样的错误,除了告知用户,剩下的就是尽力使程序安全的终止。这种异常出现几率很少,但一旦出现,是很难解决的
- Exception:Exception 又 有 两 个 分 支 , 一 个 是 运 行 时 异 RuntimeException , 一 个 是其他Exception(又称受检异常,所以Error和RuntimeException 亦被称为不受检异常)
- 常见的RuntimeException有:
- NullPointerException
- ClassCastException
- ClassNotFoundException
- ArrayIndexOutOfBoundsException
- NumerFormatException
- 受检异常:一般是外部错误,这种异常都发生在编译阶段,Java 编译器会强制程序去捕获此类异常,可以用Throws抛出异常,也可用try-catch捕获异常
- 不受检异常:这种异常发生在运行期,Java编译器不会强制程序去捕获
- 常见的RuntimeException有:
- 最后,讲下Throw 和 throws 的区别:
- 位置不同:
- throws 用在函数上,后面跟的是异常类,可以跟多个;而 throw 用在函数内,后面跟的是异常对象。
- 功能不同:
- 1.throws 用来声明异常,让调用者只知道该功能可能出现的问题,可以给出预先的处理方式;throw抛出具体的问题对象,执行到throw,功能就已经结束了,跳转到调用者,并将具体的问题对象抛给调用者。也就是说 throw 语句独立存在时,下面不要定义其他语句,因为执行不到。
- 2.throws 表示出现异常的一种可能性,并不一定会发生这些异常;throw 则是抛出了异常,执行 throw 则一定抛出了某种异常对象。
- 位置不同: