JAVA中try catch捕获异常的问题

try{
语句1;
}catch(ExecuteException e){
try{
语句1;
}catch(ExecuteException e1){
e1.printStackTrace();
}
}
try{
语句2;
}
catch(ExecuteException e){
重试语句2; (和语句1重试一样,就不再写出来了。)
}
我自己的做法是这样写了多个类似如上的try catch语句(但是总认为不对劲 - -。)....
ExecuteException类是自己定义的异常类,每个语句都可能报这个异常类。那么现在问题来了,我要的需求就是:如果语句1执行错误,重试语句1一次,如果重试成功,再继续语句2,如果重试还是catch异常,那么直接终止程序,后续语句都不执行了;如果;2也和1一样异常之后重试一次,成功则继续语句3,失败则终止程序...
我这样写着的话,不管语句1是否异常执行都会执行2的吧,请问try catch还有什么好的方法可以解决我的问题呢?求大神指点!!!!

在java中添加捕获异常代码时,需要把认为可能会出现异常的代码包括在try语句块内,处理异常的代码包括在catch语句内。在程序执行时,如果try语句内的代码出现错误,try会创建异常对象并抛出,catch捕获异常对象,则catch语句块内的代码将会执行,这样就可以处理异常错误了。

void fun1()

{

throw int();//抛出错误信息

}

int main()

{

try

{

fun1();

}

catch (int &e)//捕获错误信息

{

cout << "Exception" << endl;

cout << e << endl;

return 0;

}

扩展资料

try是try..catch..finally块中用来引导第一部分的关键字,用于声明需要捕获指定语句块的异常

完整的使用方法是

try {

语句块1

} catch (<? extends Throwable> e) {

语句块2.1

} catch (<? extends Throwable> e) {

语句块2.2

} catch (<? extends Throwable> e) {

语句块2.3

...

} finally {

语句块3

}

参考资料:百度百科 - try (java关键字)

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-10-30
语句会抛出你自定义的异常,这种异常程序要求必须try----catch处理或者声明抛出异常,就是throwsXXException(自定义异常)你如果想要重试还是异常就终止的话,你需要声明抛出异常,也就是告诉虚拟机,运行语句1可能会抛出异常,并且在catch中的语句不加trycatch,这样你在抓到第一次异常以后,会第二次执行语句1,如果此时再次抛出异常,则直接抛给调用者,如果调用者没有对该异常进行处理,那么程序会弹出提示异常关闭.追问

你说的在第二次执行语句1的时候不try catch我想到过,但是不行啊,这样就是在整个方法中抛出异常了,那第一次执行语句1的时候还会去catch它的异常吗?

追答

就是要给整个方法抛异常啊
第一次回捕捉到,你不是用trycatch了么,第二次不捕捉,如果第二次报错,那么第二次直接抛出你自定义的异常啊,这是你要的效果吧!~

追问

恩,就是这个效果,我在第二次执行的catch里面打印异常的后面加一个return,貌似就可以达到这个效果勒!~~~

追答

是的,return就不继续执行下面的代码了,java代码是按照顺序执行的,也就是说,你同一个方法里面的代码是从上到下顺序执行的。中间如果有return,方法就结束了,不会继续向下运行。

追问

恩恩!感谢解答哈,问题这样应该是可以解决的啦~~

追答

不用客气,帮助你的同时也在反思我学过的东西。

本回答被提问者采纳
第2个回答  2014-10-30
你这个写法,运行的效果是:尝试1,如果有异常,再次尝试1,再次异常则打印异常。
异常2是独立的语句块,与1没有什么关系的。

try{
语句1;
}catch(ExecuteException e){
try{
语句1;
}catch(ExecuteException e1){
e1.printStackTrace();
}
}

try{
语句2;
}
catch(ExecuteException e){
重试语句2; (和语句1重试一样,就不再写出来了。)
}追问

是的,所以我发现我自己的错误了嘛,就是不知道要如何处理这个问题,才问问大家的意见咯~~

第3个回答  2014-10-30
按照你的思路,在重试第二遍时catch里加上System.exit(1);不就退出了?
就像这样:
try{
语句1;
}catch(ExecuteException e){
try{
语句1;
}catch(ExecuteException e1){
e1.printStackTrace();
System.exit(1);
}
}
try{
语句2;
}
catch(ExecuteException e){
重试语句2; (和语句1重试一样,就不再写出来了。)
}
第4个回答  2014-10-30
可以增加变量,判断语句一是否执行成功,然后想不往下执行根据变量判断是否直接return
相似回答