java之异常

异常处理

异常的定义

1.异常是在代码序列运行时出现的非正常事件,是特殊的运行错误对象。异常的发生将阻止程序正常运行,并可能出现以下两种情况。

1)程序运行终止,控制权返回给操作系统

2)程序运行终止,系统死机崩溃状态

异常类

1.java提供了以Throwable类为基类的一系列异常类和错误类。throwable有两个直接的子类--Error(错误类)和Exception(异常类),Error类代表程序出现的错误,如程序运行时系统内部错误或资源耗尽等。这种错误是不能通过修改程序代码来恢复的。Exception类,代表程序出现的异常。

2.Exception类包括运行异常类(RuntimeException及其子类)和非运行异常类,运行异常类的产生一般由程序员的编程错误引起,完全可以通过改进程序避免,所以java编译器对此类异常不进行检查。非运行异常类是由运行环境引发的异常,eg:文件读写错误,数据库连接不通,找不到文件等。所以java编译器要求java程序必须捕捉或处理所有非运行异常。

常见的异常类

异常类异常类描述异常类别
ArithmeticException算术错误运行异常
ArrayOutOfBoundsException数组越界使用运行异常
NullPointerException引用空对象运行异常
IllegalArgumentException参数无效运行异常
NumberFormatException数据格式不对运行异常
SecurityException安全性错误运行异常
ClassNotFoundException未找到欲装载的类非运行异常
FileNotFoundException未找到指定的文件或目录非运行异常
IOException输入、输出错误非运行异常
InterruptedException线程在睡眠、等待或其他原因暂停时被其他进程打断非运行异常

Throwable常见方法

方法声明功能描述
String getMessage()输出错误性质
String toString()给出异常的类型与性质
void printStackTrace()指出异常的类型、性质、栈层次及出现在程序中的位置并输出至标准错误流
void printStackTrace(PrintStream s)指出异常的类型、性质、栈层次及出现在程序中的位置并输出至指定的输出流

异常处理

1.java中异常处理是通过try……catch……fianlly语句来实现的,具体格式为:

try{
    可能抛出异常的语句
}
catch(异常类型1 异常对象){
    对异常类型1对象的处理
}
catch(异常类型2 异常对象){
    对异常类型2对象的处理
}
…… …… ……
catch(异常类型n 异常对象){
    对异常类型n对象的处理
}
finally{
    不管是否出现异常,必须执行的语句
}

 

说明:

1)将有可能出现异常的代码用try-catch语句块进行处理,当try语句块中的代码运行出现异常时,则进入catch语句块,从上至下依次与catch语句块中的异常类型进行查找匹配(检查以抛出的异常对象类型是否与该catch语句块中指定的异常类型相同或为其子类)执行完catch代码块中的程序代码后,将继续执行catch代码块后的其他代码,而不会执行try代码块中发生异常语句后面的代码。

2)在异常处理中,最多有一个catch语句块会被执行。另外,如果有多个catch语句块,且catch语句块中的参数所指定的异常类型有父子继承关系,则要求处理子类异常的catch语句块放在处理父类异常的catch语句块的前面。否则会出现编译错误。

3)由于finally语句块中的代码肯定会被执行,所以通常在finally语句块中进行资源的清除工作。

在方法中抛出异常

1.若某个方法可能会发生异常,但不想在当前方法中处理这个异常,则可以使用throws、throw关键字在方法中抛出异常。

使用throws关键字抛出异常

1)throws关键字通常被应用在声明方法时,用来指定方法可能抛出的异常。多个异常可使用逗号分隔。

2)如果是Error、RuntimeException或它们的子类,可以不使用throws关键字来声明要抛出的异常,编译仍能顺利通过,但在运行时会被系统抛出。

使用throw关键字抛出异常

1)throw关键字通常用于方法体中,并且抛出一个异常对象。程序在执行到throw语句时立即终止,它后面的语句都不执行。通过throw抛出异常后,如果想在上一级代码中来捕获并处理异常,则需要在抛出异常的方法中使用throws关键字在方法的声明中指定要抛出的异常;如果要捕获throw抛出的异常,则必须使用try-catch语句块。

2)throw通常用来抛出用户自定义异常。

自定义异常类

1.自定义异常类必须继承Exception类或其子类

class MyException extends Exception{
    public MyException(String ErrorMessage) {
        super(ErrorMessage);
    }
}        

2.自定义异常的抛出

1)自定义异常不可能依赖系统自动抛出,因为系统不知道错误在哪里,所以需在自定义的出错位置借助于throw语句抛出自定义的异常类对象。用throw语句抛出异常对象的语法格式为:

修饰符 返回类型 方法名(参数列表)throws 异常类名列表{
    …… …… ……
    throw 异常类对象
    …… …… ……
}

说明:

1)一般这种抛出异常的语句应该被定义为在满足一定条件时执行。

2)含有throw语句的方法。应该在方法头定义中增加“throws 异常类名列表"。如果方法中的throw语句中不止一个,则在异常类名列表中一一列出,中间用逗号隔开。

 

异常使用原则

1.在当前方法声明中使用try-catch语句捕获异常

2.一个方法被覆盖时,覆盖它的方法必须抛出相同的异常或异常的子类

3.如果父类抛出多个异常,则覆盖方法必须抛出那些异常的一个子集,不能抛出新异常

注:Error、RuntimeException或它们的子类,可以不使用throws关键字来声明要抛出的异常

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值