public void re(int i) {
if (i > 5){
this.i = i;
}else {
try {
throw new Exception("数据非法!");
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("123");
}
java.lang.Exception: 数据非法!
at com.zsxfa.java.Ex3.re(ExcTest1.java:21)
at com.zsxfa.java.ExcTest1.main(ExcTest1.java:10)
123
public void re(int i) throws Exception {
if (i > 5) {
this.i = i;
}else {
throw new Exception("数据非法!");
System.out.println("123");
}
public void re(int i) throws Exception {
if (i > 5) {
this.i = i;
}else {
throw new Exception("数据非法!");
}
System.out.println("123");
java.lang.Exception: 数据非法!
at com.zsxfa.java.Ex2.re(ExcTest.java:30)
at com.zsxfa.java.ExcTest.main(ExcTest.java:11)
数据非法!
try{
return;
}catch(){
}finally{
}
return;
上面的代码的执行顺序是这样的:
代码段首先进入try语句,因无异常抛出,代码将要return的内容保存在内存中,然后执行finally,因finally中无可执行内容,再转回try中执行return,整个代码段执行结束,而finally后面的return是不会执行的。
1、不管有没有出现异常,finally块中代码都会执行;
2、当try和catch中有return时,finally仍然会执行;
3、finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,
而是先把要返回的值保存起来,不管finally中的代码怎么样,返回的值都不会改
变,仍然是之前保存的值),所以函数返回值是在finally执行前确定的;
4、finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值。
在下面的代码中,当抛出运行时异常后,后面的代码还会执行吗,是否需要在异常后面加上return语句呢?
public void add(int index, E element){
if(size >= elements.length) {
throw new RuntimeException("顺序表已满,无法添加");
//return; //需要吗?
}
....
}
为了回答这个问题,我编写了几段代码测试了一下,结果如下:
//代码1
public static void test() throws Exception {
throw new Exception("参数越界");
System.out.println("异常后"); //编译错误,「无法访问的语句」
}
//代码2
try{
throw new Exception("参数越界");
}catch(Exception e) {
e.printStackTrace();
}
System.out.println("异常后");//可以执行
//代码3
if(true) {
throw new Exception("参数越界");
}
System.out.println("异常后"); //抛出异常,不会执行
总结:
另外总结一下运行时异常与非运行时异常的区别:
常见运行时异常:
常见非运行时异常:
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://lebron.blog.csdn.net/article/details/124904790
内容来源于网络,如有侵权,请联系作者删除!