A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 唐巍 黑马帝   /  2012-3-12 16:56  /  1567 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在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();
        }
}

2 个回复

倒序浏览
throw new Exception();
这里抛出异常后程序就停止了,后面的语句就执行不了,所以jvm会认为这是句废话。

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

我是这么理解的。不知道对不对。
回复 使用道具 举报
编译时他检查你程序的语法逻辑是否正确,throw语句之后的语句必然不会被执行到所以编译时出错。但是如果封装成一个方法后,逻辑就说的通了,虽然运行的时候方法下的那句依旧没有运行。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马