java tyr{}catch语句
try代码块里放的是尝试执行的代码
catch是用于捕捉处理异常的
try {可能出现异常的代码
} catch(异常类名A e){
如果出现异常类A类异常,那么执行该代码
} ...(catch可以有多个)
finally {
必须要执行的代码 处理完异常后 在 抛出新的异常前 必须执行的代码段
}
提前返回值,finally中对变量赋值无效
public static void main(String[] args) {
public static int demo() {
int i=1;
try {
i=i/0;
System.out.println(i);
} catch (Exception e) {
i=3;
System.out.println(i);
return i;
}finally {
i=4;
System.out.println(i);
}
return i;
//结论: 如果catch中有return存在,且返回值已被确定,finally中对返回值的修改将不起作用
}
}
finally会在每一次异常捕捉执行完后执行
public static void main(String[] args) {
int i=1;
try {
i=i/0;
System.out.println(i);
} catch (Exception e) {
System.out.println(i);
throw new RuntimeException();//抛出新的异常,finally是 处理完异常后 在 抛出新的异常前必须执行的代码段
}finally {
System.out.println(i+ 1);
}
System.out.println(i + 2);
}
}
内外层嵌套try catch的话 从内到外执行,且内部catch执行完的话外部将不会捕捉到异常,但finally会执行 但这里不太懂为什么外部finally比内部最终输出程序执行要早
public static void main(String[] args) {
try {
try {
int num[]=new int[5];
num[6]=2;
}catch (Exception e) {
System.err.println("内catch");
}finally {
System.err.println("内finally");
}
System.out.println("内输出");
}catch (Exception e) {
System.err.println("外catch");
}finally {
System.err.println("外finally");
}
System.out.println("外输出");
}
贴一个大神的链接,开头文案参考于他 java中try...catch处理异常