处理异常的方式有try-catch 和 throws
那问题就来了,什么时候用try-catch,什么时候用throws 呢?
先说一下二者的区别
throws是将异常抛出,后续代码不再执行。
try…catch是将异常抛出,并且要继续执行后面的代码
try-catch方式定义格式:
try {
可能出现异常的代码;
} catch(异常类名1 变量名1) {
异常的处理代码1;
}catch(异常类名2 变量名2) {
异常的处理代码2;
}finally {
// 善后工作【关闭I/O等资源】
}
注意:
- 像数据库连接、输入输出流、网络编程Socket等资源,JVM是不能自动的回收的,我们需要自己手动的进行资源的释放。此时的资源释放,就需要声明在finally中。
- catch中的异常类型如果没有子父类关系,则谁声明在上,谁声明在下无所谓。
catch中的异常类型如果满足子父类关系,则要求子类一定声明在父类的上面。否则,报错 - 常用的异常对象处理的方式:String getMessage(), printStackTrace()
throws方式定义格式:
public void 方法() throws 异常类名 {
}
什么时候用try-catch,什么时候用throws 呢?
- 如果方法A 调用方法B, B调用C, 在B或者C里面可能会有异常抛出,那就应该在A里面用try-catch 去处理这个异常,而B或者C则应用throws进行处理
- try catch一般在最上层使用,底层的都使用throws向上抛出。如果即在最上层做try catch,又在底层方法做try catch,程序会变的很混乱。一般可预见的错误,比如空指针,你完全可以在最上层比如controller层进行判断下,不要让null进入底层方法引起不必要的麻烦
- 如果父类中被重写的方法没有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]);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/133727.html