java中的异常

定义

程序运行过程中发生的意外

异常的处理机制

作用:发生异常时 会跳过异常代码 继续往下执行 不会中断

五大关键字

  • try:可能发生异常的代码
  • catch:捕获异常 只有在发生异常情况下才会执行
  • finally:无论如何都要执行的代码 除非Java虚拟机退出
  • throws:声明异常
  • whrow:手动抛出异常

常见的异常处理结构

  • try-catch
  • try-catch-finally
try{
   //try块中放可能发生异常的代码。
   //如果执行完try且不发生异常,则接着去执行finally块和finally后面的代码(如果有的话)。
   //如果发生异常,则尝试去匹配catch块。

}catch(SQLException SQLexception){
  //每一个catch块用于捕获并处理一个特定的异常,或者这异常类型的子类。Java7中可以将多个异常声明在一个catch中。
  //catch后面的括号定义了异常类型和异常参数。如果异常与之匹配且是最先匹配到的,则虚拟机将使用这个catch块来处理异常。
  //在catch块中可以使用这个块的异常参数来获取异常的相关信息。异常参数是这个catch块中的局部变量,其它块不能访问。
  //如果当前try块中发生的异常在后续的所有catch中都没捕获到,则先去执行finally,然后到这个函数的外部caller中去匹配异常处理器。
  //如果try中没有发生异常,则所有的catch块将被忽略。

}catch(Exception exception){
  //...
}finally{

 //finally块通常是可选的。
 //无论异常是否发生,异常是否匹配被处理,finally都会执行。
 //一个try至少要有一个catch块,否则, 至少要有1个finally块。但是finally不是用来处理异常的,finally不会捕获异常。
//finally主要做一些清理工作,如流的关闭,数据库连接的关闭等。 
  • try-finally
  • try块不能独立存在

异常处理的执行顺序问题

  • try-catch-后续代码
    有异常:try->catch->后续代码
    无异常:try->后续代码
  • try-catch-finally
    有异常:try->catch->finally->后续代码
    无异常:try->finally->后续代码
public static int getInt() {
		try {
                System.out.println("11111");
			return 2;
			
		}catch(Exception e){
			e.printStackTrace();
		}finally {
			
			
			System.out.println("0000");
		}
		return 0;
	}  

异常中存在return时的执行顺序

  • try{return;}catch{}finally
  • try{}catch{return;}finally
  • 如果try或者catch中有return作为方法放回值 则方法的返回值会提前出结果 但是finall继续执行
public class Test1 {
    public static void main(String[] args) {
        Test1 test1 = new Test1();
        System.out.println(test1.say());
    }

    public String say() {
        String str = "abc";
        try {
            Integer.parseInt(str);
            return "try";
        } catch (Exception e) {
            System.out.println("catch");
            return "catch";
        } finally {
            System.out.println("finally");
            return "finally + return";
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值