if(y==-1) break;
if(y==2) throw new IOException(); // 假如没有声明Exception的话,这里就会编译错误
z=x[y]/y;
}
}
}
异常传播
来看段代码:
[java]
public class Test {
public static void main(String[] args) {
a();
}
static void a(){
b();
}
static void b(){
c();
}
static void c(){
int i=5/0;
}
}
运行结果:
Exception in thread "main" java.lang.ArithmeticException: / by zero
at test.Test.c(Test.java:36)
at test.Test.b(Test.java:33)
at test.Test.a(Test.java:30)
at test.Test.main(Test.java:27)
方法调用顺序:
main → a → b → c
异常传递顺序:
c → b → a → main → JVM(JVM终止)
由于ArithmeticException是运行时异常不需要捕获。
注意点
1. 当try语句块中有return语句,finally也将执行
[java]
int f(){
try{
return 5;
}finally{
return 10;
}
}//此方法返回的是10
2.throw有类似return的强力转向功能,即throw后的语句不执行,并且导致编译无法通过。
3. 重写方法中www.2cto.com
[java]
class A{ // 假如这两个异常调换,会报B类中的异常不能跟A类中的兼容
void f() throws Exception{
}
}
class B extends A{ // 也就是说这个方法中的异常必须和上面方法中的相同或是其子类
void f() throws IOException{
}
}