1.当我们对throw的对象进行try catch之后
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");
}
结果显示:123被输出
java.lang.Exception: 数据非法!
at com.zsxfa.java.Ex3.re(ExcTest1.java:21)
at com.zsxfa.java.ExcTest1.main(ExcTest1.java:10)
123
2 不对throw的对象进行try catch操作
- 2.1
public void re(int i) throws Exception {
if (i > 5) {
this.i = i;
}else {
throw new Exception("数据非法!");
System.out.println("123");
}
结果显示:编译不通过
- 2.2
public void re(int i) throws Exception {
if (i > 5) {
this.i = i;
}else {
throw new Exception("数据非法!");
}
System.out.println("123");
结果显示:异常抛出,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中保存的返回值。