JAVA之异常处理结构

一杯JAVA浓 做棵大树 7年前 (2017-04-01) 2023次浏览 0个评论

异常处理

本章要点

  • 理解异常和错误处理

  • 理解 JAVA 的异常层次结构及异常分类

  • 掌握基本的异常处理编程

 

异常

  • 异常(Exception)又称例外---是在程序运行过程中发生的、会打断程序正常执行的事件。

  • 例如:除 0(ArithmeticException)、没有给对象开辟内存空间时会出现空指针异常(NullPointException)文件找不到(FileNotFoundException)数组元素下标越界(ArrayIndexOutOfBoundsException)等。这些事件的发生将阻碍程序的正常运行。为了增加程序的容错性健壮性,程序设计时,必须考虑到可能发生的异常情况并做出相应的处理。

  • 设计程序时必须考虑可能发生的异常事件并作出相应的处理。传统程序设计时,要由编程者自己测试出错发生的原因,通过 i f 语句判断是否出现了异常事件,并进行相应的处理。

  • 传统异常处理存在的困难和问题

写程序难

★ 大部分精力花在出错处理上了

只把能够想到的错误考虑到

★ 对以外的情况无法处理

程序可读性差

★ 大量的错误处理代码混杂在程序中

出错返回的信息量太少

★ 无法更确切的了解错误状况或原因

 

异常层次结构及分类

JAVA 之异常处理结构

异常层次结构及分类

ErrorException

1.Throwable以下的异常都可以被捕获

2.所有Error类及其子类代表java运行时系统中可能发生的异常情况,是致命的,即程序遇到了非常严重的不正常状态,不能简单恢复执行,这就是错误。如:内存耗尽、系统内部错误等,通常我们(应用程序)不应捕获这些异常。

3.所有Exception类及其子类代表java程序中可能发生的异常情况,是非致命的通过某种修正后程序还能继续执行。这类错误叫作异常。如:文件不存在、无效的下标、空引用、网络断开、打印机脱机、磁盘满了等,通常我们(应用程序)可以捕获这些异常。

Exception 分类

Exception 是要重点掌握的,它也分为两类:
(1)受控异常(检查异常):java 编译器对受控异常强制执行捕获或者声明

(2)不受控异常(非检查异常):java 编译器不会检查代码以确定是捕获或者声明不受控异常。尽管编译器对不受控异常没有捕获或者声明的强制要求,但在知道可能发生这种异常时应提供合适的异常处理代码。

                                  |—— IOException

                                  |—— AWTException

Exception  ——|

                                  |—— ClassNotFoundException

                                      |—— NoSuchMethodException

 

不受控异常

 

JAVA 之异常处理结构

异常层次结构及分类

异常处理

  • try-catch结构

  • try{

  • //可能产生异常的代码

  • }

  • catch(someException e){

  • //处理异常的代码

  • }

  • catch(someException e){

  • //处理异常的代码

  • }

 

  • try-catch-finally结构

  • try{

  • //可能产生异常的代码

  • }catch(someException e){

  • //处理异常的代码

  • } finally{

  • //必须执行的代码

  • }

异常处理

  • 注意:
  • catchfinally必须至少有一个跟在try 后面
  • 如果不发生异常,catch块中的代码不会被执行
  • 不论是否发生异常finally块中的代码一定会被执行

自定义异常

用户为什么要自定义异常?

Java类库中定义的异常主要用来处理编程中一些常见的运行错误,这些错误是系统可以预见和自动识别的。

若用户程序有其特殊的逻辑要求,需要通过Java的异常处理机制来处理用户自定义的异常。

如何自定义异常?

  1. 创建一个类,必须继承Exception
  2. 在可能抛出自定义异常方法的方法头中声明该异常
  3. 在方法体中指明需要抛出自定义异常对象的位置 创建异常对象 使用throw子句抛出异常

 

自定义异常(例)

在可能抛出自定义异常方法的方法头中声明该异常

public static void show(int score)

                         throws NumberRangeException{

      if(score<0||score>100){

    NumberRangeException e=

                       new NumberRangeException("输入的数字不在指定的范围!请重新输入。");

    throw e;

      }

else{

  int s=score/10;

  switch(s){

  case 10:

  case 9:System.out.println("A");break;

  case 8:System.out.println("B");break;

  case 7:System.out.println("C");break;

  case 6:System.out.println("D");break;

  default:System.out.println("E");  }

      }

}

 show()方法的调用

public static void main(String[] args) {

       int score = Integer.parseInt(args[0]);

       try{

             show(score);

       }catch(NumberRangeException e){

       System.out.println(e.getMessage());

      }

}

 throws 与 throw

  • 1.throws 用于抛出方法层次的异常,并且直接由这些方法调用异常处理类来处理该异常,所以它常用在方法的后面。比如 public static void main(String[] args) throws IOException

  • 2.throw 用于方法块里面的代码,比 throws 的层次要低,表示它抛出异常, 但它不会处理它,而是由方法块的 throws Exception 来调用异常处理类来处理。

 

转载请注明:转自:TeenShare 梯云分享


做棵大树 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明JAVA 之异常处理结构
喜欢 (1)
[欢迎投币]
分享 (0)
关于作者:
一个整天无所事事的,有时候忽然热血的孩子
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址