try catch finally 以前一直以为如果程序catch异常了,只有在try catch语句块后面写finally语句,才能继续执行finally里面的代码,但是如果不写finally,程序也会继续执行,那么这个finally不是没什么用吗,以前csdn的一个相关帖子:url=http://topic.csdn.net/t/20030821/12/2172217.html][/url] 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 没有finally的情况:Connection conn = null;Statement stmt = null;try { Connection conn = DriverManager.getConnection(DBurl, userName, password); Statement stmt = conn.createStatement(); stmt.close(); conn.close();} catch(Exception e) {}那么如果createStatement()出现了异常,conn.close()还会执行吗?你打开的Connection还得到关闭吗?finally主要是用来保证一些回收资源的代码得到执行的,不管有没有异常,finally块中的代码都将被执行有finally的情况:Connection conn = null;Statement stmt = null;try { Connection conn = DriverManager.getConnection(DBurl, userName, password); Statement stmt = conn.createStatement();} catch(Exception e) {}finally { stmt.close(); conn.close();} finally 是必需执行的 所以一些需要处理的都可以放在这里面只有一种情况会阻止finally 子句执行, 就是虚拟机被关闭( 例如执行System.exit方法,或是机器关闭,或是电源关闭)。这意味着控制流程可能脱离正常的执行顺序。例如,如果有return在try语句块内的代码中,finally子句中的代码会在返回前执行。如果不用fianlly 不能保证那些资源得到处理 Connection conn = null; Statement stmt = null; try { Connection conn = DriverManager.getConnection(DBurl, userName, password); Statement stmt = conn.createStatement(); } catch(Exception e) { } stmt.close(); conn.close(); 可能帖子没说清楚,我的意思是写在try语句块外面,向上面这样,程序也会继续执行 怎么没人回了:(写段例子程序吧public class Test { public static void main(String[] args) { try { m(); } catch (Exception e) { e.printStackTrace(); } finally{ System.out.println("finally语句"); } System.out.println("继续执行"); } public static void m() throws Exception{ throw new Exception(); }}结果:java.lang.Exceptionfinally语句 at com.bjsxt.struts.Test.m(Test.java:15) at com.bjsxt.struts.Test.main(Test.java:6)继续执行 我觉得三楼说的情况是在try catch 语句块没有异常出现的时候下面的语句才会执行但是如果有异常出现,程序将会去执行catch语句块中的代码,而不执行下面的语句了。 那要是你在catch中return了呢?你自己试试看看finally还是有用的 public class Test { public static void main(String[] args) { try { m(); } catch (Exception e) { e.printStackTrace(); return; } finally{ System.out.println("finally语句"); } System.out.println("继续执行"); } public static void m() throws Exception{ throw new Exception(); } }结果:java.lang.Exceptionfinally语句 at com.bjsxt.cms.base.Test.m(Test.java:17) at com.bjsxt.cms.base.Test.main(Test.java:7)^_^ 刚学这个,不知道可以这样理解不E1:try{int i=10/0;}catch(ArithmeticException e){}若没有finally的话,程序能运行,但没有将最后的结果显示,如果有finally的话,就可以通过finally输出结果E2:try{int i=10/0;}catch(ArithmeticException e){}finally{System.out.println(i);}结果输出为0; 这个吗得慢慢体会了多写几行代码就会体验到了。。finally是肯定会执行的,包括try中可能包含return语句但是如果是写在后面不写在finally里面,那么return后,那些代码是不会被执行滴。 要睡觉了,希望明天能看到答案,谢谢楼上的回帖,尤其是dreamhunter_lan try{ 。。}catch(Exception e){ // 如果throw这个异常或者return,那么如果没有finally,则程序不会继续往下走;但如果有finally,则还会执行finally中的语句。自己可以写个简单的例子看看就知道了,光靠理论不行的,要想进步快动手才是硬道理。}。。 main方法里面return,不知道它return到哪去了 说的对,还有种情况就是try里面出现return语句时,如果不finally,那么程序就会不执行异常后面的语句了,直接跳了出去,所以,我们做开发的时候,遇到try外面还有语句的时候,记得要加上finally语句块。。 还有一种情况,如果catch(){}中的代码也有异常抛出, finally中的代码也可以保证执行:try{ ... ...} catch(){ ... ...//这里抛出异常}finally{ ... ...//必须执行的代码} main方面里面的return就退出虚拟机了吧。 finaly块中的代码是在TRY CATCH执行之后执行的,不管有没有异常,在很多时候,这条语句很有用 finally主要做善后处理,像关闭资源等,如果你不需要什么善后处理,就不需要用finally 但一半最好用finally去保证出错时候的解决方案 请读这段代码:public class Test { public static void main(String[] args) { try { m(); } catch (Exception e) { e.printStackTrace(); } finally{ System.out.println("finally语句"); } System.out.println("继续执行"); } public static void m() throws Exception{ throw new Exception(); }}结果:java.lang.Exception finally语句 at com.bjsxt.struts.Test.m(Test.java:15) at com.bjsxt.struts.Test.main(Test.java:6) 继续执行 虽然m()抛了异常,但后面的代码System.out.println("继续执行");不写在finally里面也会执行到 楼上的几位已经说的很明白啦,如果需要try 或者 catch里面有return语句,是绝对不会运行到外面地!如果运行在jdbc上面,很明显连接没有关闭! 现在才发现昨天写return那程序结果看错了,确实在catch中如果有return,后面要是没finally就不会执行 public static void main(String[] args) {}main方法的返回值是 void 也就是说他是没有返回值的,如果你要return的话 编译都不会通过。更别说执行了 接口到底是什么?求解释 为什么myeclipse 的java swing 的design不显示界面呢? java关于时间计算 泛型问题 线程问题 log4j怎么应用 高手帮忙看看我的代码有什么问题 java里的内部类该怎么用UML的class diagram表示? 高手请进: about mechanism of garbage collector and finilize() jbuilder的环境设置问题 关于字符流的问题 关于线程的问题。。 关于interface的问题 ????
Connection conn = null;
Statement stmt = null;
try {
Connection conn = DriverManager.getConnection(DBurl, userName, password);
Statement stmt = conn.createStatement();
stmt.close();
conn.close();
} catch(Exception e) {}
那么如果createStatement()出现了异常,conn.close()还会执行吗?你打开的Connection还得到关闭吗?
finally主要是用来保证一些回收资源的代码得到执行的,不管有没有异常,finally块中的代码都将被执行
有finally的情况:
Connection conn = null;
Statement stmt = null;
try {
Connection conn = DriverManager.getConnection(DBurl, userName, password);
Statement stmt = conn.createStatement();
} catch(Exception e) {}finally {
stmt.close();
conn.close();
}
只有一种情况会阻止finally 子句执行, 就是虚拟机被关闭( 例如执行
System.exit方法,或是机器关闭,或是电源关闭)。这意味着控制流程可能脱
离正常的执行顺序。例如,如果有return在try语句块内的代码中,finally
子句中的代码会在返回前执行。
如果不用fianlly 不能保证那些资源得到处理
Statement stmt = null;
try {
Connection conn = DriverManager.getConnection(DBurl, userName, password);
Statement stmt = conn.createStatement();
} catch(Exception e) { }
stmt.close();
conn.close(); 可能帖子没说清楚,我的意思是写在try语句块外面,向上面这样,程序也会继续执行
写段例子程序吧public class Test {
public static void main(String[] args) {
try {
m();
} catch (Exception e) {
e.printStackTrace();
} finally{
System.out.println("finally语句");
}
System.out.println("继续执行");
}
public static void m() throws Exception{
throw new Exception();
}
}结果:
java.lang.Exception
finally语句
at com.bjsxt.struts.Test.m(Test.java:15)
at com.bjsxt.struts.Test.main(Test.java:6)
继续执行
但是如果有异常出现,程序将会去执行catch语句块中的代码,而不执行下面的语句了。
finally还是有用的
public static void main(String[] args) {
try {
m();
} catch (Exception e) {
e.printStackTrace();
return;
} finally{
System.out.println("finally语句");
}
System.out.println("继续执行");
}
public static void m() throws Exception{
throw new Exception();
}
}
结果:
java.lang.Exception
finally语句
at com.bjsxt.cms.base.Test.m(Test.java:17)
at com.bjsxt.cms.base.Test.main(Test.java:7)
^_^
E1:
try{
int i=10/0;
}
catch(ArithmeticException e)
{
}
若没有finally的话,程序能运行,但没有将最后的结果显示,如果有finally的话,就可以通过finally输出结果
E2:
try{
int i=10/0;
}
catch(ArithmeticException e)
{
}
finally{
System.out.println(i);
}
结果输出为0;
{
。。
}
catch(Exception e)
{
// 如果throw这个异常或者return,那么如果没有finally,则程序不会继续往下走;但如果有finally,则还会执行finally中的语句。自己可以写个简单的例子看看就知道了,光靠理论不行的,要想进步快动手才是硬道理。
}
。。
说的对,还有种情况就是try里面出现return语句时,如果不finally,那么程序就会不执行异常后面的语句了,直接跳了出去,所以,我们做开发的时候,遇到try外面还有语句的时候,记得要加上finally语句块。。
try{
... ...
} catch(){
... ...//这里抛出异常
}finally{
... ...//必须执行的代码
}
但一半最好用finally去保证出错时候的解决方案
public class Test {
public static void main(String[] args) {
try {
m();
} catch (Exception e) {
e.printStackTrace();
} finally{
System.out.println("finally语句");
}
System.out.println("继续执行");
}
public static void m() throws Exception{
throw new Exception();
}
}结果:
java.lang.Exception
finally语句
at com.bjsxt.struts.Test.m(Test.java:15)
at com.bjsxt.struts.Test.main(Test.java:6)
继续执行 虽然m()抛了异常,但后面的代码System.out.println("继续执行");
不写在finally里面也会执行到
public static void main(String[] args) {}main方法的返回值是 void 也就是说他是没有返回值的,如果你要return的话 编译都不会通过。更别说执行了