Java程序设计2 第三章

第三章:异常

一、异常的理解

1. 异常:程序运行过程中出现的非正常的情况。

2. 异常的分类

(1) 父类:Throwable,位于 java.lang包中 (2) 子类:Error,错误 (3) 子类:Exception,异常

二、异常的分类

1. 父类:Throwable,位于 java.lang包中

(1) Throwable 类是 Java 语言中所有错误或异常的超类(父类)

(2) 常见的构造方法:   Throwable() :无参数的构造方法   Throwable(String message):带有字符串类型的构造方法,参数异常的信息

(3) 成员方法   void printStackTrace() :打印异常详细信息,用于程序员开发调试   String getMessage() :获取字符串类型的异常信息

2. 子类:Error,代表错误

(1) Error 是 Throwable 的子类,用于指示合理的应用程序不应该试图捕获的严重问题         (表示仅靠程序无法恢复的严重错误) (2) 案例:内存空间不足,或是Java虚拟机方法调用时栈溢出。(java.lang.StackOverflowError) (3) 特点:遇到这样的错误,程序中无法处理。

3. 子类:Exception,代表异常

(1) 运行时异常: java.lang.RuntimeException的子类或是间接的子类   a. 特点:编译器不会检测它,运行时报错   b. 案例:       java.lang.ArrayIndexOutOfBoundsException(数组的下标越界)       java.lang.StringIndexOutOfBoundsException(字符串下标越界)       java.lang.IndexOutOfBoundsException(下标越界)       java.lang.NullPointerException(空指针异常)       java.lang.NumberFormatException(数字格式转换异常)       java.lang.ClassCastException(类型转换异常)   c. 处理:这种异常可以避免,可以处理也可以不处理

(2) 非运行时异常:和java.lang.RuntimeException 没有任何继承关系的异常类   a. 特点:编译过程中编译器进行检测,编译报错   b. 案例:       Class.forName("hello");   c. 处理:非运行时异常一旦出现必须处理,否则编译无法通过   d. 编译报错:         i. 语法问题         ii. 非运行时异常,必须通过异常的处理手段进行解决

三、异常的产生

1. 自动产生异常:运行程序时,遇到错误的代码,自动产生异常,程序自动终止

结果:程序因为异常而被终止

2. 手动产生异常:

(1) 关键字:throw (2) 语法:throw new 异常类名("异常信息"); (3) 位置:必须定义方法的内部 (4) 结果:程序因异常而被终止

四、异常传递

异常传递: 按着方法的调用链方向反方向传递,直至JVM,最终导致程序终止

五、异常的处理

1. 消极处理异常

(1) 关键字:throws (2) 位置:定义方法的声明部分 (3) 语法:   修饰符 返回值类型 方法名(形参)throws 异常类名1,异常类名2{} (4) 结果:程序依然因为异常而被终止,没有从根本上解决问题,只是推卸责任 (5) 作用:可以让非运行时异常编译通过

2. 积极处理异常

(1) 语法:   try{       // 可能出现异常的语句   }catch(异常类名 e){       // 出现异常时,需要执行的语句   } (2) 位置:定义在方法的实现内 (3) try后面跟多个catch结构,从上往下依次进行匹配 (4) 利用多态的技术,使用父类型处理子类型的异常;而且子类型在前,父类型在后 (5) finally:定义在 try..catch后面,finally中的语句,不管有没有异常必须执行的语句   a. 语法:       try{           // 可能出现异常的语句       }catch(异常类名 e){           // 异常出现时,需要执行的语句       }finally{           // 不管有没有异常,都需要执行的语句       }

六、自定义异常类

1. 定义一个类继承异常类

(1) 定义异常类继承了 Exception,则定义的为非运行时异常 (2) 定义异常类继承了 RuntimeException,则定义的为运行时异常

2. 提供两个构造方法

(1) 无参数的构造方法 (2) 带有字符串类型的参数构造方法   public 类名(String message){       super(message);   }

七、方法覆盖[终极版]

1. 子类的方法名、形参列表、返回值类型和父类相同 2. 子类的访问修饰符和父类型或是比父类更宽 3. 子类不能抛出比父类更宽的异常

你可能感兴趣的:(java,开发语言,笔记)