黑马程序员技术交流社区

标题: 关于异常中throw语句的问题 [打印本页]

作者: 唐巍    时间: 2012-3-12 16:56
标题: 关于异常中throw语句的问题
在throw语句下面不能定义语句,代码1报错。但将throw语句封装成函数后,为什么下面可以定义语句?代码2编译通过。
代码1:编译失败。
class Test2
{
        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");
        }
}

代码2:编译成功。
class Test2
{
        public static void main(String[] args)
        {
                try
                {
                        showExce();
                        System.out.println("a");
                }
                catch (Exception e)
                {
                        System.out.println("b");
                }
                finally
                {
                        System.out.println("c");
                }
                System.out.println("d");
        }
        public static void showExce()throws Exception
        {
                throw new Exception();
        }
}
作者: 王睿    时间: 2012-3-12 17:07
throw new Exception();
这里抛出异常后程序就停止了,后面的语句就执行不了,所以jvm会认为这是句废话。

封装函数后,jvm并不知道里面是什么东西。语法上是没问题的,所以可以编译成功。

我是这么理解的。不知道对不对。
作者: 吴璞玉    时间: 2012-3-12 17:16
编译时他检查你程序的语法逻辑是否正确,throw语句之后的语句必然不会被执行到所以编译时出错。但是如果封装成一个方法后,逻辑就说的通了,虽然运行的时候方法下的那句依旧没有运行。




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