4.1.1 try-catch-finally
try-catch-finally语句在我们日常使用时出现频率也是异常高的。
官方也对try-catch-finally语句做出的详细的解释:
抛出异常时,公共语言运行库(CLR)会查找catch
处理此异常的语句。如果当前正在执行的方法不包含这样的catch
块,则CLR会查看调用当前方法的方法,依此类推调用堆栈。如果未catch
找到任何块,则CLR向用户显示未处理的异常消息并停止执行该程序。
下面是try-catch-finally语法的模板
try{
//代码执行区域
}catch(Exception e){
//异常处理区域
}finally{
//无论如何都会执行的代码区域
}
对于try-catch-finally的实现:
public static boolean catchFinallyTest1() {
try {
int i = 10 / 0; // 抛出 Exception,后续处理被拒绝
System.out.println("i vaule is : " + i);
return true; // Exception 已经抛出,没有获得被执行的机会
} catch (Exception e) {
System.out.println(" -- Exception --");
return catchMethod(); // Exception 抛出,获得了调用方法的机会,但方法值在finally 执行完后才返回
}finally{
finallyMethod(); // Exception 抛出,finally 代码块将在 catch 执行 return 之前被执行
}
}
当然我们也可以之进行try-catch之后并不进行finally,但是非常不建议这样!finally常用来执行释放资源语句。
当我们try里面的方法报错时就会停止运行try里面的代码段,同时传入一个异常参数,方便人们对异常的处理。如果try代码段没有任何错误则会进行finally代码段里面的程序
4.1.2 throw和throws
throw:用于手动抛出一个异常(try中的异常是Java自动抛出的)。如果throw位于try语句中,则在try对应的catch中捕获并处理。否则就需要抛给调用者进行try-catch。此时,throw所在的方法必须是:[修饰符1,修饰符2,···] 返回值 方法名(形参列表) throws Exception {}表明当前方法可能抛出异常。表示的是此方法之中不进行异常的处理,而交给被调用处处理。 throws:主要是在方法定义上使用的,表示的是此方法之中不进行异常的处理,而交给被调用处处理。 重点:throw不能单独使用,只能配合throws或try{}catch{}使用。
class TestDemo {
public static void main (String args[]) throws Exception{
try { // 直接抛出了一个自定义的异常类对象
throw new Exception("自己定义的异常!");
} catch (Exception e) {
e.printStackTrace();
System.out.println(e.getMessage());
throw new Exception("自己定义的异常!");//直接抛出,没有try-catch则必须在方法上加上:throws Exception
}
}
}