异常

1. 概述

  java异常是java提供的一种识别及响应错误的一致性机制,java异常机制可以使程序中异常处理代码和正常业务代码分离,保证程序代码更加优雅,并提高程序健壮性。

 

  throwable:异常类的最终父类,它有两个子类,Error与Exception。throwable常用的方法:

  (1) getCause():返回抛出异常的原因。如果cause不存在或未知,则返回null。

  (2) getMeage():返回异常的消息信息

  (3) printStackTrace():对象的堆栈跟踪输出至错误输出流,作为字段System.err的值

 

  Error(错误):表示程序无法处理的错误,一般与程序员的执行操作无关

  (1) 理论上这些错误是不允许发生的,如果发生,也不应该试图通过程序去处理

  (2) Error不是try-catch的处理对象,JVM一般的处理方式是终止发生错误的线程

  (3) Error有两个子类:VirtualMachineError(虚拟机错误)和AWTError(AWT组件出错)

 

  Exception(异常):出现原因取决于程序,所以程序也理应该通过try-catch处理。异常分为两类:检查异常和非检查异常

  (1) 检查异常:编译器要求必须处理,否则不能通过编译,使用try-catch捕获或者throws抛出,常见的有:IOException

  (2) 非检查异常(运行时异常):编译期不会检查,所以在程序中可不处理,但如果发生,会在运行时抛出。所以这类异常要尽量避免,常见的有Error和RuntimeException类及其子类。

 

  java异常机制用到的关键字:try、catch、finally、throw、throws

  (1) try:用于监听。将要被监听的代码(可能抛出异常的代码)放在try语句块之内,当try语句块内发生异常时,异常就被抛出。

  (2) catch:用于捕获异常。catch用来捕获try语句块中发生的异常

  (3) finally:finally语句块总是会被执行

  (4) throw:用于抛出异常

  (5) throws:用在方法签名中,用于声明该方法可能抛出的异常。

 

2. try...catch...finally语句块

  (1) try块中的局部变量和catch块中的局部变量(包括异常变量),以及finally中的局部变量,他们之间不可共享使用

  (2) 每一个catch块用于处理一个异常,同一个try块下的多个catch异常类型有父子关系,应该将子类异常放在前面,父类异常放在后面,这样保证每个catch块都有存在的意义。

  (3) 不管有没有异常,finally语句总会执行

  (4) 当try、catch中有return时,finally中的代码仍然会继续执行

  (5) finally语句中,对基本数据类型的变更,不会影响到try/catch模块;对包装类型、静态变量、全局变量的修改会影响到try/catch模块。

  (6) finally代码中最好不要包含return,程序会提前退出,也就是说返回的值不是try或catch中的值

  (7) finally中避免再次抛出异常

  

 

3. throws和throw的基本用法

 

4.  自定义异常

  自定义检查异常:只需要扩展Exception类即可

  自定义非检查异常:扩展自RuntimeException

  自定义的异常应该总是包含如下的构造函数:

  (1) 一个无参构造函数;

  (2) 一个带有String参数的构造函数,并传递给父类的构造函数;

  (3) 一个带有String参数和Throwable参数,并都传递给父类构造函数;

  (4) 一个带有Throwable 参数的构造函数,并传递给父类的构造函数。

 

  

 

posted @ 2019-03-17 17:40  欣欣向荣666  阅读(153)  评论(0编辑  收藏  举报