黑马程序员技术交流社区

标题: 异常问题 [打印本页]

作者: Moonboy2014    时间: 2014-6-16 00:12
标题: 异常问题
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.println("c");
                }
                System.out.println("d");
        }
}
请教各位高手,这段代码问题出在哪里,知道的请详细解答一下,感谢!
作者: 唐坚    时间: 2014-6-16 01:33
System.out.println("a");
这句代码访问不到 。
throw new Exception(); 你都抛出异常了,运行到这句代码时就会跳出。所以访问不到。
换个顺序就行了。
作者: lvc    时间: 2014-6-16 02:40
因为程序执行try、catch块时
遇到了return或throw语句都会导致方法结束.你的输出代码在这之后是执行不到的,所以报错
作者: 土突突    时间: 2014-6-16 16:05
throw new Exception()执行后代码将会跳转到catch块中,故不会再继续执行下边的打印语句
作者: Moonboy2014    时间: 2014-6-16 18:18
土突突 发表于 2014-6-16 16:05
throw new Exception()执行后代码将会跳转到catch块中,故不会再继续执行下边的打印语句 ...

程序跳到catch块不执行下面的语句没问题,关键下面的语句也没语法错误。它干嘛要报错呢,是java的语法规定还是?
作者: Moonboy2014    时间: 2014-6-16 18:19
土突突 发表于 2014-6-16 16:05
throw new Exception()执行后代码将会跳转到catch块中,故不会再继续执行下边的打印语句 ...

程序跳到catch块不执行下面的语句没问题,关键下面的语句也没语法错误。它干嘛要报错呢,是java的语法规定还是?
作者: AuroraAria    时间: 2014-6-16 18:20
请问:在func中既然已经try,catch过了,那在main里面还有必要再try一次吗?
作者: Moonboy2014    时间: 2014-6-16 18:21
lvc 发表于 2014-6-16 02:40
因为程序执行try、catch块时
遇到了return或throw语句都会导致方法结束.你的输出代码在这之后是执行不到的 ...

程序跳到catch块不执行下面的语句没问题,关键下面的语句也没语法错误。它干嘛要报错呢,是java的语法规定还是?
作者: Moonboy2014    时间: 2014-6-16 18:22
唐坚 发表于 2014-6-16 01:33
System.out.println("a");
这句代码访问不到 。
throw new Exception(); 你都抛出异常了,运行到这句代码 ...

程序跳到catch块不执行下面的语句没问题,关键下面的语句也没语法错误。它干嘛要报错呢,是java的语法规定还是?
作者: 唐坚    时间: 2014-6-16 21:31
Moonboy2014 发表于 2014-6-16 18:18
程序跳到catch块不执行下面的语句没问题,关键下面的语句也没语法错误。它干嘛要报错呢,是java的语法规 ...

你指的的是catch 中的语法 没有出错。为什么还要报错吧。
你写的每句代码 编译器应该都能访问到,如果你写的代码,编译器访问不到,那么编译器就就会跳出程序 直接报错。这应该是java的内部机制实现的。

作者: 墓____夜    时间: 2014-6-16 21:42
因为你直接抛出异常,  抛出异常会直接执行catch  所以你打印的代码会出错。。
作者: 黑子    时间: 2014-6-16 21:50
路过!!!!!
作者: Moonboy2014    时间: 2014-6-16 22:53
唐坚 发表于 2014-6-16 21:31
你指的的是catch 中的语法 没有出错。为什么还要报错吧。
你写的每句代码 编译器应该都能访问到,如果你 ...

:loveliness:真是这样啊?
作者: ╭月牙湾湾╮    时间: 2014-6-16 23:08
学习下。
作者: 郝义涛    时间: 2014-6-16 23:13
唐坚 发表于 2014-6-16 01:33
System.out.println("a");
这句代码访问不到 。
throw new Exception(); 你都抛出异常了,运行到这句代码 ...

throw new Exception(); 你都抛出异常了,运行到这句代码时就会跳出。所以访问不到。
这里编译就不会通过,所以应该删除System.out.println("a");

那么答案就是
b
d

作者: Moonboy2014    时间: 2014-6-16 23:23
不用代码演示了,换个方式问,就是说java在编译一段程序时,只要java虚拟机有编译不到的代码就会报错是吗?
作者: 西風涼╮    时间: 2014-6-16 23:33
学习中~~~~~~~~~~~~~~~~~~
作者: Без_тебя    时间: 2014-6-16 23:51
代码没问题,这个应该是学习异常时候用的吧
作者: 土突突    时间: 2014-6-17 01:02
Moonboy2014 发表于 2014-6-16 18:18
程序跳到catch块不执行下面的语句没问题,关键下面的语句也没语法错误。它干嘛要报错呢,是java的语法规 ...

话是没错,但这可以理解为是java语法的一个约定。很多时候不是你觉得没错就行了啊。sun发布JDK的初衷就是为了制定一个通用的规范啊
作者: Moonboy2014    时间: 2014-6-17 22:41
土突突 发表于 2014-6-17 01:02
话是没错,但这可以理解为是java语法的一个约定。很多时候不是你觉得没错就行了啊。sun发布JDK的初衷就是 ...

:loveliness:恩恩,谢谢!
作者: 焦国军    时间: 2014-6-18 13:49
学习一下了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2