目录
一、问题引入
C语言中,对于数据正确性检查和数据异常的处理通常是这样的:
利用 if 判断和 scanf 的返回值,完成对数据的正确性检查和数据格式输入错误的问题。那么java的异常处理是否是这样的呢?
很显然 java 有着自己独特的异常处理机制。
二、异常处理
首先,作为一门面向对象编程语言,构成java程序的基础是类。Java 对异常事件
进行了分类,下图是Java异常层次结构的示意图:
可以看出所有异常类都是继承 Throwable 类而来的,但往下又分为两种:Error类和Exception。
Error:
Java虚拟机无法解决的严重问题。 如: JVM系统内部错误、 资源耗尽等严重情况。一般我们不考虑编写代码进行处理。
Exception:
其它因编程错误或偶然的外在因素导致的一般性问题, 可以使用针对性的代码进行处理。其中又分为两类,一类是IOException ,另一类是RuntimeException。由程序错误导致的异常属于RuntimeException异常类,由外部因素如像文件读写等I/O 异常属于IOException异常。
此外,我们还可以自定义异常类,去详细的描述异常信息。
异常处理机制
对异常事件分了类,那么下一步就是对异常事件的处理和响应机制。
机制一:try-catch-finally
格式如下:
try 代码块里面是可能会出现异常的代码,catch代码块里面是对异常进行处理的代码,finally是无论都会执行的代码。需要注意的是,try 里面抛出了异常会立马执行catch里面的代码,执行完catch的代码后不会继续运行try里面的代码,以及catch代码块可以有多个。我们看一个例子:
当Scanner 读取了一个不符合数据格式的数据时会抛出 InputMismatchException异常,然后执行catch代码块里面的代码
机制二:throws + 异常类型
throws +异常类型,写在方法的声明处,此时此方法执行时, 可能会抛出的类型,对于数据正确性的检查我们可以使用该机制。需要注意的是 :throws的方式只是将异常抛给了方法的调用者,并没有真正将异常处理掉。所以在调用该方法的地方还是需要try - catch处理。结合自定义异常类,我们看一个例子
当输入的学号为负时,testId 会抛出一个自定义异常,catch代码块会提示用户输入正确的数据范围。
三、总结
java 对异常进行了分类,我们更需要考虑对Exceprion类进行编程处理,处理异常的机制 为 try - catch - finally 机制。相对于类c编程语言的异常处理,我感觉java 的异常处理显然更加的优雅,能够减少代码的冗余。
整理时间:2022-06-01