关于Java异常处理 在绝大多数情况下catch之后的语句不是会被执行吗?是不是有时直接把异常之后的处理(如内存释放)放在catch之后就可以了呢?在什么情况下要使用Finally呢?请高手指点。小弟先谢过~ 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 catch之后的语句是会被执行的,除非你在catch中return了在捕获到异常和没有捕获到异常都需要执行的代码放到finally块中 没有异常时执行TRY的程序,出现异常时跳到catch块里面处理异常,不管有没有异常总是要执行FIANL块. catch之后的语句不是会被执行吗?catch之内的语句,如果没有异常是不会执行的,try{ //doing}catch(Exception1 e1){ e1.printTrace()//如果有异常,这个代码执行}catch(Exception2 e2){ return something;}finally{//这个代码不管有没有异常,都会执行的,即使catch中有return,finally也执行!}coding//异常已经处理了,代码继续执行的! 如果代码中有System.exit(0);finally里面的代码是不会执行的,呵呵return是能执行的!呵呵 在单线程的条件下finally是会被执行的,但在多线程的环境下就不一定了 ,就是说finally不总是最有效的。况且已经有个机器人(虚拟机)帮你做了内存回收的全部工作,在你对操作系统和编译原理不是精通的时候还是多看看java核心的基础知识吧。你要是非要用的话提供你两个方法:使用System.gc()可以不管JVM使用的是哪一种垃圾回收的算法,都可以请求Java的垃圾回收;在缺省机制来终止化该对象释放资源,是finalize()一般为:protected void finalize() throws Throwable try/catch/finally的知识 catch语句不一定会执行的!如果try语句中没有发生异常的话,那么就不会执行catch语句了!在JAVA中关于内存的处理我也说不好,他有垃圾回收机制,会定期回收。用的较多的是在连接数据库时,最后要关闭数据库连接。finally语句不管程序中有没有异常发生都会执行的,除非你在其之前就调用语句关闭语句。比如说:System.exit(0); catch后的语句,只在发生该当异常时才被执行如:catch XXexception{A} A只会在发生XXexception时被执行 A应该执行发生XXexception时需要执行的操作finally执行一些程序不论正常、异常都需要执行的操作如:前面进行了数据库连接,因为不论程序正常、异常都需释放连接,所以就放在finally里对于内存释放,如果发生异常时你需要马上立即进行,则放在catch中,否则发在finally中为好 我的意思是:在绝大多数情况下catch块之后的语句不是会被执行吗?是不是有时直接把异常之后的处理(如内存释放)放在catch块之后就可以了呢?在什么情况下要使用Finally呢? 不好意思,刚才没说明白。 try()中只要不出现异常问题..就可以执行的啊.catch语块中是根据抛出异常的类型来做出解决办法.Finally 是不管你try{}和catch{}中出不出现异常..都会执行的..除非在try{}遇到return.则下面的Finally就不会执行. try{ ... }catch(XXXException e1){ .... }catch(YYYException e2){ .... return exception;//即使这里返回,后面的finally也要被执行 }finally{ ....//这里的代码通常是用来释放资源用的.} 如果执行了 System.exit(0);JVM 中止了, finally 将不会被 执行.! 对于垃圾回收机制是有这两种方法,但是他们的权限是很小的,只能是相当于建议权,至于最后是不是会对垃圾进行回收则要看jvm的了,建议的东西没有什么实质性的效果。 JAVA如何在显示器上画图 在线请教一个算法程序的实现? java数据类型转化问题 Java 中,子类对象在创建时,堆栈内存怎样的? '数组\for循环'问题 能否通过程序修改标签名称,大家帮忙看看 急,哪位高手能不能給我個用java做ftp上傳的例子!@#$%^ netty和文件句柄? 请高手解决一个问题! 如何写,在WEB中的拨号程序. IReport applet 打印方向 问题 用Hibernate插入时间数据出现错误
在捕获到异常和没有捕获到异常都需要执行的代码放到finally块中
catch之内的语句,如果没有异常是不会执行的,try{
//doing
}catch(Exception1 e1){
e1.printTrace()//如果有异常,这个代码执行
}catch(Exception2 e2){
return something;
}finally{
//这个代码不管有没有异常,都会执行的,即使catch中有return,finally也执行!
}
coding//异常已经处理了,代码继续执行的!
System.exit(0);
finally里面的代码是不会执行的,呵呵
return是能执行的!呵呵
你要是非要用的话提供你两个方法:使用System.gc()可以不管JVM使用的是哪一种垃圾回收的算法,都可以请求Java的垃圾回收;在缺省机制来终止化该对象释放资源,是finalize()一般为:protected void finalize() throws Throwable
如:catch XXexception{A}
A只会在发生XXexception时被执行
A应该执行发生XXexception时需要执行的操作finally执行一些程序不论正常、异常都需要执行的操作
如:前面进行了数据库连接,因为不论程序正常、异常都需释放连接,所以就放在finally里对于内存释放,如果发生异常时你需要马上立即进行,则放在catch中,否则发在finally中为好
不好意思,刚才没说明白。
catch语块中是根据抛出异常的类型来做出解决办法.
Finally 是不管你try{}和catch{}中出不出现异常..都会执行的..除非在try{}遇到return.
则下面的Finally就不会执行.
...
}catch(XXXException e1){
....
}catch(YYYException e2){
....
return exception;//即使这里返回,后面的finally也要被执行
}finally{
....//这里的代码通常是用来释放资源用的.
}
如果执行了 System.exit(0);
JVM 中止了, finally 将不会被 执行.!