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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈祥厅 初级黑马   /  2013-1-7 15:07  /  1659 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 陈祥厅 于 2013-1-8 23:35 编辑

class Demo
{
        public static void func()
        {
                try
                {
                        throw new Exception();
                        System.out.println("A");
                }
                catch(Exception e)
                {
                        System.out.println("B");
                }
        }
        pubic static void main(String[] args)
        {
                try
                {
                        func();
                }
                catch(Exception e)
                {
                        System.out.println("C");
                }
                System.out.println("D");

        }
}
//编译失败,因为打印“A”的输出语句执行不到。----------------------------打印A的执行不到但是上面不是抛异常了么为啥下面catch里面的不执行啊

评分

参与人数 1技术分 +1 收起 理由
金鑫 + 1 赞一个!

查看全部评分

9 个回复

倒序浏览
  try
                {
                        throw new Exception();
                        System.out.println("A");
                }
因为你在try语句中抛出了throw new Exception();下面的catch语句捕获的是你抛出的Exception(),A自然就执行不到了
回复 使用道具 举报
A是肯定执行不到的,在try中throw new Exception();下面不可以放任何语句,都是执行不到的
回复 使用道具 举报
金鑫 发表于 2013-1-7 15:12
try
                {
                        throw new Exception();

catch里面的打印B的语句怎么没执行呢
回复 使用道具 举报
  try
                {
                        func();
                }
你把func()方法放在try里面了,当主函数执行到try,只会抛出异常,catch捕捉到的才可以打印
回复 使用道具 举报
陈祥厅 发表于 2013-1-7 15:18
catch里面的打印B的语句怎么没执行呢

你把func()方法里的try中的A语句去掉,程序正常运行,结果是B,D
回复 使用道具 举报
//逐条分析吧
class Demo
{
        public static void func()
        {
                try
                {
                       //你在这里抛出了一个新异常,那么执行过程时一发现异常就会直接跳转到catch,根本就不会再执行tr中y抛出异常语句后面的内容了                        throw new Exception();
                        System.out.println("A");
                }
                catch(Exception e)
                {
                        System.out.println("B");
                }
        }
        public static void main(String[] args)
        {
              /*因为上面的func()语句的异常在内部已经解决。所以对于此事try()中的func()实际上就只包含System.out.println("A");
                同时因为throw new Exception()发生在System.out.println("A");之前,故不执行这句,会直接跳转catch(),于是这便产
           生冲突了,若将func()中的throw new Exception和System.out.println("A");顺序进行调换,则不会出现问题*/
                try
                {
                        func();
                }
                catch(Exception e)
                {
                        System.out.println("C");
                }
                System.out.println("D");

        }
}
总结:你可以去掉A,那么结果是B\D,也可以调换A和throw new Exception()的顺序,这样结果是A、B、D。但是C不会执行,因为根本没有EXception给它catch了。

评分

参与人数 1技术分 +1 收起 理由
金鑫 + 1 赞一个!

查看全部评分

回复 使用道具 举报
//逐条分析吧
class Demo
{
        public static void func()
        {
                try
                {
                       //你在这里抛出了一个新异常,那么执行过程时一发现异常就会直接跳转到catch,根本就不会再执行tr中y抛出异常语句后面的内容了                        throw new Exception();
                        System.out.println("A");
                }
                catch(Exception e)
                {
                        System.out.println("B");
                }
        }
        public static void main(String[] args)
        {
              /*因为上面的func()语句的异常在内部已经解决。所以对于此事try()中的func()实际上就只包含System.out.println("A");
                同时因为throw new Exception()发生在System.out.println("A");之前,故不执行这句,会直接跳转catch(),于是这便产
           生冲突了,若将func()中的throw new Exception和System.out.println("A");顺序进行调换,则不会出现问题*/
                try
                {
                        func();
                }
                catch(Exception e)
                {
                        System.out.println("C");
                }
                System.out.println("D");

        }
}
总结:你可以去掉A,那么结果是B\D,也可以调换A和throw new Exception()的顺序,这样结果是A、B、D。但是C不会执行,因为根本没有EXception给它catch了。

评分

参与人数 1技术分 +1 收起 理由
舒远 + 1 赞一个!

查看全部评分

回复 使用道具 举报
首先LZ 这个异常是属于编译时异常,不是属于运行时异常。

try{
    throw new Exception();//您这里已经跑出去了一个异常,那么他下面的代码肯定不会执行,虚拟机不会做这种无用的操作,所以你在编译的时候,他就会报下面的打印A不可到达
    System.out.println("A");
}
catch(Exception e)
{
System.out.println("B");//然后您这里对你上面的异常进行了捕捉,所以您下面在主函数中的try catch 是捕捉不到上面的抛出来的异常,因为他已经被捕捉了
}

try
{
func();
}
catch(Exception e) //您这里是不做不到您上面抛出的 throw new Exception的 因为他自己已经在fun()方面里面进行了捕捉
{
System.out.println("C");
}

评分

参与人数 1技术分 +1 收起 理由
舒远 + 1 很给力!

查看全部评分

回复 使用道具 举报
你好
try语句里抛出异常后就会交给catch语句处理所以下面的语句肯定执行不到
所以会报错。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马