网站建设核心之处理异常

4980

        假设在一个Java程序运行期间出现了一个错误。这个错误可能是由于文件包含了错误的信息,或者网络连接出现问题造成的,也有可能是因为使用无效的数组下标,或者试图使用一个没有被赋值引用而造成的。用户期望在出现错误时,程序能够采用一些理智的行为,如果由于出现错误而使得某些操作没有完成,程序应该:返回到一种安全状态,并能够让用户执行一些其他的命令;或者允许用户保存所有操作的结果,并以适当的方式终止程序。

  要做到这些并不是一件很容易的事情。其原因是检测(或引发)错误条件的代码通常离那些能够让数据恢复到安全状态,或者能够保存用户的操作结果,并正常地退出程序的代码很远。异常处理的任务就是将控制权从错误产生的地方转移给能够处理这种情况的错误处理器。为了能够在程序中处理异常情况,必须研究程序中可能会出现的错误和问题,以及哪类问题需要关注。
  1.用户输入错误
  除了那些不可避免的打字录入外,有些用户喜欢各行其是,不遵守程序的要求。例如,假设有一个用户请求连接一个URL,而语法却不正确。在程序代码中应该对此进行检查,如果没有检查,网络数据包就会给出警告。
  2.设备错误
  硬件并不总是让它做什么,它就做什么。打印机可能被关掉了。网页可能临时性地不能浏览。在一个任务的处理过程中,硬件经常出现问题。例如,打印机在打印过程中可能没有纸了。
  3.物理限制
  磁盘满了,可用存储空间已被用完。
  4.代码错误
  程序方法有可能无法正确的执行。例如,方法可能返回了一个错误的答案,或者错误地调用了其他方法。使用了一个无效的数组下标,试图查找一个在散列表中不存在的数据项以及试图对一个空栈进行退栈操作。
  对于方法中出现的错误,传统的处理方式是返回一个特定的错误编码,调用这个方法的方法对其进行分析。例如,对于一个从文件中读取信息的方法来说,如果返回值不是标准字符,而是一个-1,则表示文件结束。这种处理方式对于很多异常状况都是可行的。还有一种表示错误状况的常用返回值是null引用。当希望查询的参数不存在时,这个方法就会返回null。
  遗憾的是,并不是在任何情况下都能够返回一个错误编码。有可能无法明确地将有效数据与无效数据加以区分。一个返回整型的方法就不能简单地通过返回-1表示错误,因为-1很可能是一个完全合法的结果。
  在Java中,如果某个方法不能够采用正常的途径完整它的任务,就可以通过另外一个路径退出方法。在这种情况下,方法并不返回任何值,而是抛出(throw)一个封装了错误信息的对象。需要注意的是,这个方法将会立刻退出,并不返回任何值。此外,调用这个方法的代码也将无法继续执行,而是,异常处理机制开始搜索能够处理这种异常状况的异常处理器(exceptionhandler),异常具有自己的语法和特定的继承结构。