黑马程序员技术交流社区
标题:
java异常的一些小问题 请高手指点
[打印本页]
作者:
陈红建
时间:
2012-8-1 18:04
标题:
java异常的一些小问题 请高手指点
设下列try-catch语句块中的第二个语句s2将引起一个异常,则回答下列问题:
try{ s1; s2; s3; }
catch(ExceptionType e1){}
catch(ExceptionType e2){}
s4;
(1)s3会执 行吗
(2)如果异常未被捕获,s4会被执行吗?
(3)如果catch子句捕获了异 常,s4会执行吗?说明一下理由?
作者:
杨锦
时间:
2012-8-1 18:38
(1)S3 不会执行,因为虚拟机抛出第一个异常的时候程序就停止了
(2)如果异常没有被捕获S4不会被执行。程序就停止了,是执行不到S4的。
(3)如果异常被捕获了,可以执行S4。
楼主看看下面这个例子
class Test {
public static void main(String[] args)
{
System.out.println("程序开始");
try {
System.out.println(10/0);
} catch(ArithmeticException e1) {
System.out.println("程序异常1");
}
try {
int[] arr = null;
System.out.println(arr[0]);
} catch(NullPointerException e2) {
System.out.println("程序异常2");
}
System.out.println("程序结束");
}
}
(1)异常都捕获了
程序开始
程序异常1
程序异常2
程序结束 //异常捕获了是可以执行的S4的。
(2)异常未捕获
程序开始
Exception in thread "main" java.lang.ArithmeticException: / by zero //异常未捕获的时候,只能执行S1,碰到S2有抛出异常,程序就退出了,后面就都不执行了
at Test.main(Test.java:8)
(3)
作者:
周世阳
时间:
2012-8-1 18:42
try-catch的作用时让程序产生异常的时候不会终止,继续执行下去,无论是否有异常,try-catch过后程序会继续执行s4,一旦try中有表达式抛出异常,则try中剩余的表达式不执行,跳到catch块中执行代码,然后继续执行try-catch后的代码(也就是s4)
作者:
李知伦
时间:
2012-8-1 19:25
设下列try-catch语句块中的第二个语句s2将引起一个异常,则回答下列问题:
try{ s1; s2; s3; }
catch(ExceptionType e1){}
catch(ExceptionType e2){}
s4;
(1)s3会执 行吗
不会
因为通常情况try块被执行一次,只有一个catch快会被执行,除非循环中使用了continue开始下一次循环,这才可能导致多个catch块被执行.
也就是说s2抛出异常,本次try块就结束了,跳到catch块来处理异常,s3就没有机会执行
(2)如果异常未被捕获,s4会被执行吗?
不会
因为try块代码出现异常时,系统自动生成一个异常对象,会寻找能处理该异常的catch块,找不到则运行时环境终止,程序退出,就没机会执行后面的s4
(3)如果catch子句捕获了异 常,s4会执行吗?说明一下理由?
会
因为完成了一个抛出捕获异常的过程,当然会继续正常执行后面的程序
作者:
左建飞
时间:
2012-8-1 20:02
public class Test20 {
public static String output="";
public static void foo (int i)
{
try
{
if (i==1)
throw new Exception();//这相当与s2;
output+="1";//这相当与s3;
}
catch(Exception e)
{
output+="2";
}
output+="3";//此处是捕获异常情况下的s4;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
foo(1);
System.out.println(output);
Demo d=new Demo();
int x=d.div(4, 0);
System.out.println(x);//这相当与没有捕获异常的s4;
}
}
class Demo
{
int div(int a,int b)//throws ArithmeticException,ArrayIndexOutOfBoundsException,FushuException
{
if (b<0) {
throw new FushuException("出现了负数的情况",b);
}
if (b==0) {
throw new ArithmeticException("被零除了!!");//数学异样为RuntimeException的子类。
}
//int[] arr=new int[4];
//System.out.println(arr[3]);
return a/b;
}
}
复制代码
以上代码是我执行过的代码。结果为
Exception in thread "main" java.lang.ArithmeticException: 被零除了!!
at day9.Demo.div(ExceptionDemo.java:41)
at day9.Test20.main(Test20.java:24)
23
可见:(1)s3不会执行。
(2)如果异常未被捕获,程序会报错,s4不会被执行。
(3)如果catch子句捕获了异常,s4会执行。
如果异常是编译时可检测异常,如果没有处理(没有抛出,也没有处理),便以失败。
如果处理了,那么就执行下面的语句。
如果是编译时不可检测的异常,如果出现此异常,程序停止。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2