几点说明:
(1)异常发生后,try块中的剩余语句将不再执行。
try {
int [ ] ints = { 1, 2, 3, 4 };
System.out.println(“异常出现前”);
System.out.println(ints[4]); //这里将出现异常
System.out.println(“我还有幸执行到吗”);
}
(2)catch块中的代码要执行的条件是:
首先在try块中发生了异常,其次异常的类型与catch要捕捉的一致。
(3)可以无finally部分,但如果存在,则无论异常发生否,finally部分的语句均要执行。即便是try或catch块中含有退出方法的语句return,也不能阻止finally代码块的执行;
- 除非执行System.exit(0)等导致程序停止运行的语句。
```java
例1:
public class Test4 {
static void method(int x[ ]) {
try {
} catch (ArrayIndexOutOfBoundsException e) {System.out.println("x[5]="+x[5]); //here
} finally {System.out.println("下标变量出界");
} } public static void main(String arg[ ]) {System.out.println("here");
} } 运行结果: 下标变量出界 hereint a[ ]={12,8,5,87,5};
method(a);
如果将here处改为x[4] 运行结果: x[4]=5 here
例2: public class ex2{ public static void main(String args[]){ String str = null; //改成空串”” ,如何? try { if (str.length() == 0) System.out.print(“The”); System.out.print(“Cow”); } catch (Exception e) { System.out.print(“and”); } finally { System.out.print(“Chicken”); } System.out.println(“show”); } } 运行结果: andChickenshow
如果将null改成空串”” 运行结果:
例3: public class A { static int some() { try { System.out.println(“try”); return 1; } finally { System.out.println(“finally”); } } public static void main(String arg[]) { System.out.println(some()); } } 运行结果: try finally 1
//例9-2 根据命令行输入的元素位置值查找数组元素的值 public class Ex9_2 { public static void main(String args[ ]) { int arr[ ] = { 100, 200, 300, 400, 500, 600 }; try { int p = Integer.parseInt(args[0]); // System.out.println(“元素值为: “ + arr[p] ); // } catch (ArrayIndexOutOfBoundsException a) { System.out.println(“数组下标出界”); } catch (NumberFormatException n) { System.out.println(“请输入一个整数”); } finally { System.out.println(“运行结束”); } } }
注意catch 排列次序,以下代码编译出错:
try {
int x=4/0;
System.out.println(“come here? “);
} catch (Exception e) { //因为Exception已包含后面的异常类型
System.out.println(“异常!”+e.toString());
} catch (ArithmeticException e) {
System.out.println(“算术运算异常!”+e.toString());
}
```