如题所述
如果不使用这种try结构时,代码报错退出就无法继续执行。有的代码出错就应该退出,有的出错尚可以补救,就不应该退出。对于这种出错不应该退出的就需要使用这种结构,在catch中进行补救。
二:使用try catch的规则a.尽量不要将try…catch写在循环中
b.如果能捕获多个异常,那么先捕获小异常,在捕获大异常
try {// ....
} catch (RuntimeException e) {//小异常
//处理1
} catch (Exception e) {//中异常
//处理2
} catch (Throwable t) {//大异常
//处理3
}
c.try{ .....}代码块里面的代码尽量的少,避免出现大段大段的代码
d.catch( ) 尽量避免使用万能代码捕获所有的异常,比如
try {//代码
} catch (Throwable t) {//这样写就捕获了所有异常,不便于区分处理
//Throwable 是错误和异常的父类
}
e.适当配合finally代码块
finally可以没有,有的话只能有一个。无论有没有发生异常,它总会在这个异常处理结构的最后运行。finally总是要执行,这以可以在异常处理最后做一些清理工作。如关闭IO流等
try {//IO流代码
} catch (IOException e) {
}finally {
ioinput.close();//流的关闭
}追问
对了,教程里也讲到了要关掉io流
追答是这样的,finally主要就是处理资源的关闭的
追问哦哦好吧!
追答记得采纳,基本上已经解答清楚了的try catch finally的规则了
我今天刚刚学这个有点难接受你说的详细一点行吗?
追答比如说:
try {
……
}
catch(ClassCastException ex){
……
}
catch(NumberFormatException ex){
……
}
catch(Exception ex){ // 这个catch必须放在最后!
……
}
通俗解释:因为Exception这个是那几个异常的 老爹!
那几个异常都是他的娃,Exception放在最前面,后面娃儿就没有机会了。
专业点:异常有一个继承体系,如果你把“父异常”放在“子异常”的异常前面,那么,子异常最先会被“父异常”捕获,也就是子异常永远都捕获不了。
我记得那个教程里面说的是,如果父类异常放在前面那个其他子类的异常也能被捕获
追答建议你在回头看一遍,比如说:
try {
……
}
catch(Exception ex){
System.out.println("Exception ");
}
catch(ClassCastException ex){
System.out.println("ClassCastException ");
}
catch(NumberFormatException ex){
System.out.println("NumberFormatException ");
}
如果是这样,而且出现了异常,那么打印的永远是“Exception ”,因为不管出现什么异常,都会被 catch(Exception ex){}捕获。
好吧!我就是觉得这些知识点很匪夷所思
追答这里 没什么难点的 try{}catch{}finally{},你只需要记住,catch分异常捕获时,小范围的异常放前面,大范围的异常放后面,如果需要在异常处理后必须执行某些代码,那么就放在finally块里,一般放到finally块里的就是关闭IO资源,数据库连接Connection,Statment.ResultSet等地方。
追问要点我都抄下来了