我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:金算盘心水论坛 > 抛出异常 >

关于抛出异常的问题

归档日期:08-04       文本归类:抛出异常      文章编辑:爱尚语录

  编译失败,因为这里直接抛出异常。 问题是:但是紧跟的后面不是catch么 这里不是相当于在函数内部直接处理掉了异常么

  问题:第一个程序里直接抛出,但是我觉得不是应该被catch捕获么, 既然被catch捕获了, 为什么不能运行catch里面的语句,反而是编译失败呢?syo不运行我可以理解

  就是不理解 为什么try里抛出之后应该被catch捕获然后运行catch里的语句

  但是程序却编译出错 同样的情况另一个程序缺编译通过 另一个程序却编译通过。

  根据我的理解! 第一个程序里是直接throw抛出异常,在编译的时候java已经发现你程序抛出异常,而try{}catch是程序运行时去捕获,故不会通过编译,第二种情况也就不难理解了,因为你有if判断,java编译时是不运行里面的代码的,就好比你一个方法要return 你如果在if判断里面return还是会报编译错误的, 希望能帮到你!

  展开全部第一个,你直接通过throw抛出了异常,这样catch已经不能再去捕获了,都已经抛出去了,你再捕获 编译肯定是行不通的

  throw就相当于把异常抛离了try代码块,而catch则是捕获try代码块的异常

  第二个,你在代码里面添加了个判断条件,这个时候编译是不会检查你这个条件的,只有运行时才会报错

  所以楼主要了解什么是一般异常 什么是运行时异常。追问第二个运行是正确的啊 就是说第二个的代码是完全没错的 可以运行出来结果!!!

  如果按照你说的话 第一个 try把异常抛出去了所以代码不能运行了 那么第二里面 当条件为1的时候也是直接抛出去了异常 这样的话 它的异常也不会被捕获了 这个时候就该报错了 可以代码可以正确运行到catch里面去···追答呵呵,还是给你说一下吧。

  首先第一个,我上面说throw已经抛离了代码块,你throw后还有运行代码,catch再去捕获 肯定会编译错误

  第二个,我所说的运行时报错就是你throw的那个异常,只是你没输出而已,所以你说能正确运行。编译能通过就是因为你在if代码块中,throw之后没有再继续任何代码操作,所以throw到catch块了,接着就执行catch里面的代码,输出结果。

  看到有人说throw后面的代码是不可达的,想了想,有点点明白,第一个程序throw写在外面程序认为是一个整体,既然throw后面的代码不可达,那么后面的catch是无效的,这就相当于你写了一个try然后没有写catch,所以编译不通过。至于第二个有了一个if分支,程序认为try if catch是一个整体,编译通过,throw只是作为if里面的代码。 不知道这样解释还算清晰吗?主要就是多想想throw后面的代码是不可达的

本文链接:http://izytravel.com/paochuyichang/617.html