黑马程序员技术交流社区
标题:
关于异常的问题
[打印本页]
作者:
杨博
时间:
2013-3-15 20:40
标题:
关于异常的问题
本帖最后由 杨博 于 2013-3-15 22:33 编辑
class Test
{
public static String output="";
public static void foo(int i)
{
try
{
if(i==1)
throw new Exception();
output+="1";
}
catch(Exception e)
{
output+="2";
return;
}
finally
{
output+="3";
}
output+="4";
}
public static void main(String args[])
{
foo(0);
System.out.println(output);
foo(1);
System.out.println(output);
}
}
复制代码
当执行foo(1)的时候,在catch中,既然遇见了return,为什么没有跳出,还执行了finally结果为3,不太理解啊,求指导?
未命名.jpg
(5.72 KB, 下载次数: 41)
下载附件
如图
2013-3-15 20:39 上传
作者:
沈子豪
时间:
2013-3-15 20:44
异常的处理方式 try
try
{
检测可能发生异常的代码
}
catch(异常类 变量)
{
处理方式:调用函数,循环
}
finally
{
一定要执行的代码
}
这是固定的,不管前面怎么样,finally里面的语句是一定要执行的
作者:
黑马李超
时间:
2013-3-15 20:46
finally块就是在程序结束前必须要执行的代码块。当catch到异常时,执行了output+=“2”;会先执行finally中的代码,然后再return。
作者:
itserious
时间:
2013-3-15 21:15
package mypack1;
class Test
{
public static String output = "";
public static void foo(int i)
{
try
{
if (i == 1)
throw new Exception();
output += "1";
} catch (Exception e)
{
output += "2";
return;
} finally
{
output += "3";
}
output += "4";
}
public static void main(String args[])
{
foo(0);
System.out.println(output);// 此时字符串 output的值得变成了"134"
foo(1);// 遇到了异常,output += "1";不再执行。 程序流跳转到时catch块中。
//运行到return的时候 output="1342"
//遇到return,方法调用结束前,必须执行finally{}里面的语句。
//这时output="13423",方法调用结束。
System.out.println(output);
}
}
注意:try{}catch{}finally{}的执行流程。再中途不管遇到什么情况使程序流程跳转或遇到 return; 使程序结束之前,都必须执行finally{}里面的语句。
作者:
HM赵磊
时间:
2013-3-15 21:24
这个要明白try catch finally的含义如下
try
{
存放被检测异常的代码(也就是可能出现异常的代码)
}
catch(异常类 异常对象名称)
{
异常处理代码(仅且挡且出现异常的时候执行的代码)
}
finally
{
不管怎样一定要被执行的代码
}
finally一般用于释放资源,例如当连接数据库到时候,最后释放数据库连接放在这里面。还有接下来学习的线程同步的第二种显式加锁解锁实现线程同步,解锁的unlock也要放在finally里面,以及后面的IO流中的FileWriter和FlieReader对象关闭流的语句也要放在finally里面 。
作者:
杨博
时间:
2013-3-15 22:33
沈子豪 发表于 2013-3-15 20:44
异常的处理方式 try
try
懂了,非常感谢啊:)
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2