如果把s4放到finally{}里面那才会执行的.
此时结束try所在的方法,把异常向上一级传递,直到main方法为止
可惜不是你,陪我到最后
/**
* 以下代码就不写注释了,相信大家都能看懂。
*/
public class ExceptionTest {
/**
* 在test方法中有一个try块,里面的代码我们可以看成是s1,s2,s3,而将打印\"The End\"这句话作为s4.不将注释去掉是不会发生任何错误的,这点相信不会有异议。
* 在没有错误的情况下运行,我们得到的是The End.
* 将注释去掉,则会引发一个异常。我们得到的结果是NumberFormat和The End,可以说The End在不管什么情况下都是会执行的。
* 我不知道我的这代码与楼主的代码有什么不一样的地方
*/
public void test() {
String s = null;
try {
s = \"5\";
int i = Integer.valueOf(s);
// s = \"a\";
i = Integer.valueOf(s);
}
catch(NumberFormatException num) {
System.out.println(\"NumberFormat\");
}
catch(Exception e) {
System.out.println(\"Exception\");
}
System.out.println(\"The End!\");
}
public static void main(String [] args) {
new ExceptionTest().test();
}
}
我把叶子的代码给改了下
/**
* 以下代码就不写注释了,相信大家都能看懂。
*/
public class ExceptionTest {
/**
* 在test方法中有一个try块,里面的代码我们可以看成是s1,s2,s3,而将打印"The End"这句话作为s4.不将注释去掉是不会发生任何错误的,这点相信不会有异议。
* 在没有错误的情况下运行,我们得到的是The End.
* 将注释去掉,则会引发一个异常。我们得到的结果是NumberFormat和The End,可以说The End在不管什么情况下都是会执行的。
* 我不知道我的这代码与楼主的代码有什么不一样的地方
*/
public void test() {
String s = null;
try {
s = "5";
int i = Integer.valueOf(s);
s = "a";
i = Integer.valueOf(s);
}
catch(ArithmeticException num) {
System.out.println("NumberFormat");
}
catch(SecurityException e) {
System.out.println("Exception");
}
System.out.println("The End!");
}
public static void main(String [] args) {
new ExceptionTest().test();
}
}
运行后
/**
* 以下代码就不写注释了,相信大家都能看懂。
*/
public class ExceptionTest {
/**
* 在test方法中有一个try块,里面的代码我们可以看成是s1,s2,s3,而将打印\"The End\"这句话作为s4.不将注释去掉是不会发生任何错误的,这点相信不会有异议。
* 在没有错误的情况下运行,我们得到的是The End.
* 将注释去掉,则会引发一个异常。我们得到的结果是NumberFormat和The End,可以说The End在不管什么情况下都是会执行的。
* 我不知道我的这代码与楼主的代码有什么不一样的地方
*/
public void test() {
String s = null;
try {
s = \"5\";
int i = Integer.valueOf(s);
// s = \"a\";
i = Integer.valueOf(s);
}
catch(NumberFormatException num) {
System.out.println(\"NumberFormat\");
}
catch(Exception e) {
System.out.println(\"Exception\");
}
System.out.println(\"The End!\");
}
public static void main(String [] args) {
new ExceptionTest().test();
}
}
你这个程序例子恰 好说明了问题,你的那 句System.out.println("The End!");当然会执行,因为你抛出的异常被你捕捉了
如果没有被你捕捉的话,下面的肯定不会执行的
你的为什么会执行,.是因为你第二个捕捉的语句,他把所有Exception的子类的异常都能捉住,所以异常不会向上传递,所以下面的那句会执行,
要测试就要像水影月圆那样,抛出的异常捕捉不到才能测试到