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);
}
}
标签:Java,抛出,try,finally,catch,错误处理,异常,throws
From: https://www.cnblogs.com/seeingxi/p/16776827.html