异常处理基本概念和类别细分

1、异常机制


Throwable:有两个重要的子类:Exception(异常)和Error(错误),二者都是java异常处理的重要子类,各自都包含大量子类。

Error(错误):是程序无法处理的错误,表示运行应用程序中较严重的问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时JVM出现的问题。例如,Java虚拟机运行错误(Virtual MachineError), JVM 不再有继续执行操作所需的内存资源时,将出现 OutOfMemoryError。这些异常发生时,Java虚拟机(JVM)一般会选择线程终止。

Exception(异常):是程序本身可以处理的异常。

       Exception 类有一个重要的子类 RuntimeExceptionRuntimeException 类及其子类表示“JVM 常用操作引发的错误。例如,若试图使用空值对象引用、除数为零或数组越界,则分别引发运行时异常(NullPointerExceptionArithmeticException)和 ArrayIndexOutOfBoundException

运行时异常:都是RuntimeException类及其子类异常,如NullPointerException(空指针异常)IndexOutOfBoundsException(下标越界异常)等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。

     运行时异常的特点是Java编译器不会检查它,也就是说,当程序中可能出现这类异常,即使没有用try-catch语句捕获它,也没有用throws子句声明抛出它,也会编译通过。

      非运行时异常 (编译异常)RuntimeException以外的异常,类型上都属于Exception类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如IOExceptionSQLException等以及用户自定义的Exception异常,一般情况下不自定义检查异常     

2、

常见RuntimeException


ArrayStoreException                试图将错误类型的对象存储到一个对象数组时抛出的异常

ClassCastException                试图将对象强制转换为不是实例的子类时,抛出该异常
IllegalArgumentException         抛出的异常表明向方法传递了一个不合法或不正确的参数
IndexOutOfBoundsException   指示某排序索引(例如对数组、字符串或向量的排序)超出范围时抛出
NoSuchElementException       表明枚举中没有更多的元素
NullPointerException                当应用程序试图在需要对象的地方使用 null 时,抛出该异常


RuntimeException出现的比较频繁,处理麻烦。因此由系统自动检测他们交给缺省的异常处理(用户不必处理)。因此java虚拟机能自动处理RuntimeException

IOException:

IOException:操作输入流和输出流时可能出现的异常。

EOFException   文件已结束异常

FileNotFoundException   文件未找到异常

其他:

ClassCastException    类型转换异常类

ArrayStoreException  数组中包含不兼容的值抛出的异常

SQLException   操作数据库异常类

NoSuchFieldException   字段未找到异常

NoSuchMethodException   方法未找到抛出的异常

NumberFormatException    字符串转换为数字抛出的异常

StringIndexOutOfBoundsException 字符串索引超出范围抛出的异常

IllegalAccessException  不允许访问某类异常

InstantiationException  当应用程序试图使用Class类中的newInstance()方法创建一个类的实例,而指定的类对象无法被实例化时,抛出该异常


3、异常的捕获和处理

处理异常机制方法有抛出异常和捕获异常:

抛出异常:当一个方法出现错误引发异常时,方法创建异常对象并交付运行时系统,异常对象中包含了异常类型和异常出现时的程序状态等异常信息。运行时系统负责寻找处置异常的代码并执行。 从方法中抛出的任何异常都必须使用throws子句。

注意:重写方法需要抛出与原方法所抛出异常类型一致异常或不抛出异常。

捕获异常:

捕捉异常通过try-catch语句或者try-catch-finally语句实现。

总体来说,Java规定:对于可查异常必须捕捉、或者声明抛出。允许忽略不可查的RuntimeException和Error。

try-catch语句,语法形式:

try{

  // 可能会发生异常的程序代码

}catch(Exception e){

 // 捕获并处置try抛出的异常类型


}

try-catch-finally语句,语法形式:

try{

  // 可能会发生异常的程序代码

}catch(Exception e){

 // 捕获并处置try抛出的异常类型

}finally{

//无论是否发生异常都执行的语句块

}

注意:

捕获异常时,若先捕捉的异常范围大于后捕捉的异常,则后捕捉的异常无法被捕捉。

因此,在捕捉异常时要先捕捉范围小的,再捕捉范围大的。

4、自定义异常

使用自定义异常一般有以下步骤:

1、通过继承java.lang.Exception类声明自己的异常类。

2、在方法适当的位置生成自定义异常的实例,并用throw抛出。

3、在方法声明的部分用throw语句声明该方法可能抛出的异常。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值