什么时候用 try-catch 和 throws ?

处理异常的方式有try-catch 和 throws
那问题就来了,什么时候用try-catch,什么时候用throws 呢?

先说一下二者的区别

throws是将异常抛出,后续代码不再执行。
try…catch是将异常抛出,并且要继续执行后面的代码
try-catch方式定义格式:

try {
    可能出现异常的代码; 
} catch(异常类名1 变量名1) { 
    异常的处理代码1; 
}catch(异常类名2 变量名2) { 
    异常的处理代码2; 
}finally {
	// 善后工作【关闭I/O等资源】
}

注意:

  1. 像数据库连接、输入输出流、网络编程Socket等资源,JVM是不能自动的回收的,我们需要自己手动的进行资源的释放。此时的资源释放,就需要声明在finally中。
  2. catch中的异常类型如果没有子父类关系,则谁声明在上,谁声明在下无所谓。
    catch中的异常类型如果满足子父类关系,则要求子类一定声明在父类的上面。否则,报错
  3. 常用的异常对象处理的方式:String getMessage(), printStackTrace()

throws方式定义格式:

public void 方法() throws 异常类名 { 
}

什么时候用try-catch,什么时候用throws 呢?

  1. 如果方法A 调用方法B, B调用C, 在B或者C里面可能会有异常抛出,那就应该在A里面用try-catch 去处理这个异常,而B或者C则应用throws进行处理
  2. try catch一般在最上层使用,底层的都使用throws向上抛出。如果即在最上层做try catch,又在底层方法做try catch,程序会变的很混乱。一般可预见的错误,比如空指针,你完全可以在最上层比如controller层进行判断下,不要让null进入底层方法引起不必要的麻烦
  3. 如果父类中被重写的方法没有throws方式处理异常,则子类重写的方法也不能使用throws,意味着如果子类重写的方法中有异常,必须使用try-catch-finally方式处理。
    示例代码:
public class ExceptionDemo { 
    public static void main(String[] args) { 
        System.out.println("开始"); 
//         method(); 
        try {
            method2(); 
        }catch (ParseException e) { 
            e.printStackTrace(); 
        }
        System.out.println("结束"); 
    }
    //编译时异常 
    public static void method2() throws ParseException { 
        String s = "2048-08-09"; 
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 
        Date d = sdf.parse(s); 
        System.out.println(d); 
    }
    //运行时异常 
    public static void method() throws ArrayIndexOutOfBoundsException { 
        int[] arr = {1, 2, 3}; 
        System.out.println(arr[3]); 
    } 
}
  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值