黑马程序员技术交流社区
标题:
视频回顾时关于异常疑问
[打印本页]
作者:
罗玉宁
时间:
2013-3-22 22:50
标题:
视频回顾时关于异常疑问
本帖最后由 罗玉宁 于 2013-3-23 20:39 编辑
class Demo
{
public static void func()
{
try
{
throw new Exception();
System.out.println(1);
}
catch (Exception e)
{
System.out.println(2);
}
}
public static void main(String[] args)
{
try
{
func();
System.out.println(3);
}
catch (Exception e)
{
System.out.println(4);
}
}
}
复制代码
编译失败。原因是打印1的输出语句执行不到。
我知道打印1的语句执行不到,但这和在main中调用这个方法有什么关系。对于编译失败的原因有点不理解,哪位给解释一下。
作者:
胡国彬
时间:
2013-3-22 23:04
对的,你的代码是有问题的,你的 System.out.println(1);这句话是死语句,永远都执行不到.
我给你分析一下,首先,你的代码从main入口,然后调用了func()方法,这个时候进入func()方法,进入之后,你就手动的抛出了一个异常, throw new Exception();同时你又对这个异常进行了捕获.也就是,这个异常的语句执行完了之后就会进入catch语句中,也就是会执行 System.out.println(2);执行完勒之后,就会跳出func()这个方法,然后执行 System.out.println(3);
java代码中不允许死语句存在,也就是不允许有永远都不会执行到的语句.
所以,只要你把System.out.println(1);这句话去掉,就不会编译报错了,去掉之后,按照我刚才的分析,这个代码最后打印出来的一定是2和3.
你可以去掉System.out.println(1);这句代码试试.有不懂的再问
作者:
lxww
时间:
2013-3-22 23:16
你这个代码运行的时候报错,错误不是异常,这段代码是无法执行到的代码,就是说System.out.println(1);这句话不会被执行到。主函数运行,调用func()方法,方法体里面你捕获异常后会直接执行抛出,不会再执行异常下面的语句,所以System.out.println(1);不会被执行。最后的结果得到的是2和3、
作者:
VOIDMAIN
时间:
2013-3-23 15:08
这是java语法中的定义把,说明java逻辑编译的能力很强,知道你那句话不能被执行,所以直接在编译的时候就让你发现问题,你在汇编下写几句不能被执行的语句就没什么事。
作者:
黑马朱超
时间:
2013-3-23 16:02
恩,是编译的时候起个提醒作用。告诉你下面的代码任何情况下都执行不了。
我倒是有个问题,觉得输出应该是只有4.编译结果是我错了,不知道为什么呢?
try
{
throw new Exception();//这个抛出异常了之后,为什么还会 执行try的catch呢?应该结束这个函数啊,直接跳出去回到主函数。主函数对于因为这个异常就不应该打印3了吧,而是直接执行catch,打印4 啊。
}
catch (Exception e)
{
System.out.println(2);
}
我觉得我想法太离谱了,哈哈,求醍醐灌顶
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2