「这是我参与11月更文挑战的第15天,活动详情查看:2021最后一次更文挑战」。
茫茫人海千千万万,感谢这一秒你看到这里。希望我的文章对你的有所帮助!
愿你在未来的日子,保持热爱,奔赴山海!
题记:昨天我们已经了解部分的异常的处理机制,接下来就让我们继续一起看下在Java中其他形式去处理异常,Java的异常处理机制!
😮异常的处理机制(重点)
在 Java 应用程序中,异常处理机制为:抛出异常,捕捉异常。
🟠 try-finally 形式:
try{
//(尝试运行的)程序代码
}finally{
//异常发生,总是要执行的代码
}
复制代码
try-finally
表示对一段代码不管执行情况如何,都会走 finally 中的代码,
例如:
public class TryFinallyDemo {
public static void main(String[] args) {
int a = 10;
int b = 0;
try{
System.out.println(a / b);
System.out.println("会走try吗");
}finally{
System.out.println("会finally吗");//会finally吗
}
System.out.println("会走外面吗");
/*
没有捕获的话,他只会走finally语句然后报出异常。
会finally吗
Exception in thread "main" java.lang.ArithmeticException: / by zero
at com.it.test3.TryFinallyDemo.main(TryFinallyDemo.java:8)
*/
}
}
复制代码
可以看到程序异常了,还是会去走finally语句块的代码。
🟡 try-catch-finally 形式:
try {
// 可能会发生异常的程序代码
} catch (异常类型A e){
// 捕获并处置try抛出的异常类型A
} finally {
// 无论是否发生异常,都将执行的语句块
}
复制代码
跟try-finally一样表示对一段代码不管执行情况如何,都会走 finally 中的代码。
当方法中发生异常,异常处之后的代码不会再执行,如果之前获取了一些本地资源需要释放,则需要在方法正常结束时和 catch 语句中都调用释放本地资源的代码,显得代码比较繁琐,finally 语句可以解决这个问题。
例如:
public class TryCatchFinallyDemo {
public static void main(String[] args) {
test();
}
public static void test() {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = null;
try {
//date = simpleDateFormat.parse("2020-10-06");//第一次运行成功
date = simpleDateFormat.parse("2020年10月06日");
} catch (ParseException e) {
e.printStackTrace();
}finally{
System.out.println("finally这里一定会执行");
}
System.out.println("会走外面这里吗" + date);
}
}
复制代码
运行成功的代码后结果:
finally这里一定会执行
会走外面这里吗Tue Oct 06 00:00:00 CST 2020
复制代码
运行失败的代码后结果:
java.text.ParseException: Unparseable date: "2020/10/06"
at java.text.DateFormat.parse(DateFormat.java:366)
at com.it.test3.TryCatchFinallyDemo.test(TryCatchFinallyDemo.java:19)
at com.it.test3.TryCatchFinallyDemo.main(TryCatchFinallyDemo.java:12)
finally这里一定会执行
会走外面这里吗null
复制代码
可以看到,无论失败,都会执行finally语句块的代码。
-
注意:
try-catch-finally
中,如果catch中 return了,finally还会执行吗?public class TryCatchFinallyDemo2 { public static void main(String[] args) { test(); } public static void test() { int a = 10; try{ System.out.println(a / 0); }catch(ArithmeticException e) { e.printStackTrace(); return ; }finally { System.out.println("finally"); } } } 复制代码
运行结果:
java.lang.ArithmeticException: / by zero at com.it.test3.TryCatchFinallyDemo2.test(TryCatchFinallyDemo2.java:11) at com.it.test3.TryCatchFinallyDemo2.main(TryCatchFinallyDemo2.java:5) finally 复制代码
可以看到,就算catch中 return了,finally也会执行。
那我们来思考下finally是在return前呢,还是return后呢?这个问题明天我们来回答!
🌸总结
相信各位看官都对异常处理机制的概念有了充分的了解吧,大家好好思考下,有想法的可以回答评论一波,明天我们继续讲解今天遗留下的问题吧!,那我们继续期待下一章的异常更多的内容吧!欢迎期待下一章的到来!
让我们也一起加油吧!本人不才,如有什么缺漏、错误的地方,也欢迎各位人才大佬评论中批评指正!当然如果这篇文章确定对你有点小小帮助的话,也请亲切可爱的人才大佬们给个点赞、收藏下吧,一键三连,非常感谢!
学到这里,今天的世界打烊了,晚安!虽然这篇文章完结了,但是我还在,永不完结。我会努力保持写文章。来日方长,何惧车遥马慢!
感谢各位看到这里!愿你韶华不负,青春无悔!
\
近期评论