黑马程序员技术交流社区
标题:
关于异常的问题
[打印本页]
作者:
ぺsimon☆
时间:
2013-4-18 17:57
标题:
关于异常的问题
class Demo
{
public static void func()
{
try
{
throw new Exception();
System.out.println("a");
}
catch(Exception e)
{
System.out.println("b");
}
}
public static void main(String[] args)
{
try
{
func();
}
catch(Exception e)
{
System.out.print("c");
}
System.out.print("d");
}
}
复制代码
上面的程序会编译失败,因为打印"a"输出的语句执行不到
为什么这句话System.out.println("a");执行不到程序就会编译失败呢?
作者:
高梦晓
时间:
2013-4-18 18:11
throw总是出现在函数体中,用来抛出一个异常。程序会在throw语句后立即终止,它后面的语句执行不到,然后在包含它的所有try块中(可能在上层调用函数中)从里向外寻找含有与其匹配的catch子句的try块。
因此 你的System.out.println("a"); 代码要放到 throw new Exception(); 前面,而不能放到后面 。
作者:
hdsjsql
时间:
2013-4-18 18:11
throw new Exception();抛出异常,表示发生异常了,必须进行处理,此时try语句中剩余的代码就不会执行了。
作者:
gerenvip
时间:
2013-4-18 18:21
本帖最后由 gerenvip 于 2013-4-18 18:22 编辑
楼主问的为什么System.out.println("a");执行不到,系统会提示编译失败呢,简单点这样说吧,
我们知道当我们抛出异常后,系统就会转向异常处理,而不再按原本程序顺序执行了。跟在后面的语句是执行不到的,就像循环中如果使用了break语句,后面的语句也执行不到一样。既然执行不到,那就是废话了。编译不通过,形象点说,一方面是系统向你提示,这是一句废话,执行不到。另一方面,提示你,你可能程序书写错误了,编译不通过,希望你能检查下。。有时想想,jvm挺人性化的,呵呵。
希望能够帮助到你。
作者:
晓风妮子
时间:
2013-4-18 18:40
class Demo
{
public static void func() throws Exception//编译失败是因为这里没有写throws Exception
{
try
{
throw new Exception();
System.out.println("a");
}
catch(Exception e)
{
System.out.println("b");
}
}
public static void main(String[] args)
{
try
{
func();
}
catch(Exception e)
{
System.out.print("c");
}
System.out.print("d");
}
}
因为函数中抛了异常,函数就要声明这个函数运行起来可能有异常,要注意了。抛异常语句相当于
return的功能,虚拟机看到异常就回去找到catch语句来处理这个异常,所以编译结果应该是bcd.
作者:
杜成龙
时间:
2013-4-18 18:59
throw new Exception();用来抛出异常,程序会在这个语句后终止,在它后面的语句就执行不到,所以在你的程序中System.out.println("a");就执行不到,throw new Exception();不是一个跳转语句,当这个语句后面还有语句时执行不到时,自然会出现错误,你可以把System.out.println("a"); 代码要放到 throw new Exception(); 前面,但这时执行的结果中不会显示c,因为你调用func()时,它最后并没抛出异常。
作者:
王九日
时间:
2013-4-18 19:05
我也看了那段视频 ,我认为把throw单独存在,直接抛出异常了,那下面代码是肯定执行不到了,java不允许这种编码格式 所以就报错了,如果把throw封装到方法中,方法声明异常,这样就可以编译通过了。
作者:
ぺsimon☆
时间:
2013-4-18 23:42
gerenvip 发表于 2013-4-18 18:21
楼主问的为什么System.out.println("a");执行不到,系统会提示编译失败呢,简单点这样说吧,
我们知道当我 ...
大概知道什么意思了谢谢
作者:
黄玉昆
时间:
2013-4-20 21:44
如果问题未解决,请继续追问,如果问题解决了,请将问题分类改为“已解决”,谢谢
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2