加载中...

Java中的错误处理

Java中的错误处理

面向对象的错误处理机制

错误被抽象成类(异常类)

错误的具体信息、发生错误的上下文状态被封装在异常类的实例中

如何使用异常

1.在方法体中创建异常类的实例

2.使用throw关键字抛出

3.异常被抛出之后的代码不会被执行

当预期到一段代码中可能会抛出异常时,课使用try捕获异常

异常类的分类

运行时异常

RuntimeException方法调用者可以不处理此类异常

预期异常

程序必须对Throwable中SQLException,ClassNotFoundException这种异常进行处理,否则会出现编译错误。

throws关键字

方法可通过throws关键字告诉调用者方法执行过程中可能会抛出哪些异常

public void transfer(Account anotherAccount, double value) throws DefeatValueException, NotEnoughMoneyException{
    if (value < 0) {
        throw new DefeatValueException("转账金额不能为负值。");
    }

    if (amount < value) {
        throw new NotEnoughMoneyException("NotEnoughMoney");
    } else {
        anotherAccount.amount += value;
        this.amount -= value;
    }
    System.out.println("转账成功!");
}

throws和catch的语法规则

方法体中可能抛出预期异常

在方法签名中使用throws写明,表示方法中不处理该异常

使用try-catch捕获此异常并进行处理

方法体中可能抛出Error和RuntimeException

无需使用throws写明

无需使用try-catch进行捕获处理

try-catch语法

try{

}catch(ExceptionType1 ex){

}catch(ExceptionType2 ex){

}catch(ExceptionType3 ex){

}

单个代码片段可能会引起多个错误

可提供多个 catch 块分别处理各种异常

ArrayIndexOutOfBoundsException****类为 Exception 类的子类,但是如果异常

属于ArrayIndexOutOfBoundsException类将执行第一个 catch 块,之后控制

将转向try/catch块之后的语句,所以始终不会执行第二个 catch 块。

异常的处理方法

自行处理

使用try-catch的语法

只有在知道如何处理的情况下才捕获异常!

方法h调用d,捕获可能发生的预期异常,

将其转换为运行时异常

void h() {

try {

​ d();

​ } catch (Exception e) {

throw new RuntimeException(e);

​ }

}

一旦程序中出现不可恢复的错误,程序应当尽快终止,不要尝试处理异常

回避异常

使用throws

异常转换

catch后进行再次throw

finally块

确保出现异常时所有清除工作都将得到处理

与try 块一起使用

无论是否出现异常,finally块都将运行

finally是防止资源泄漏的有效工具

关闭文件

回收资源

{{uploading-image-947754.png(uploading...)}}

finally语法

try {
    lc.transfer(xtr, 300);
} catch (DefeatValueException e) {
    System.out.println("负数异常");
} catch (NotEnoughMoneyException e) {
    System.out.println("余额不足");
}catch (Exception e) {
    e.printStackTrace();
}
finally {
    //用于回收资源
    System.out.println("finally");
}

异常和方法的覆盖

父类方法中声明抛出异常A

子类方法可以声明抛出异常A及其子类

子类方法可以不抛出任何异常

自定义异常

继承Exception类或者其子类

对于运行时异常需要继承RuntimeException或者其子类

根据需要实现不同的构造方法

public class NotEnoughMoneyException extends Exception{

    public NotEnoughMoneyException() {
    }

    /**
     * 带参数人构造函数
     * @param msg
     */
    public NotEnoughMoneyException(String msg) {
        super(msg);
    }
}
posted @ 2022-10-10 18:57  说句话吧  阅读(72)  评论(0)    收藏  举报