黑马程序员技术交流社区

标题: 大神看看这两个程序 为什么第一个编译通过,第二个就不... [打印本页]

作者: 小凡_fly    时间: 2014-12-3 08:59
标题: 大神看看这两个程序 为什么第一个编译通过,第二个就不...
本帖最后由 小凡_fly 于 2014-12-5 09:17 编辑

  1. //第一个:        
  2. class Demo{
  3.         public static void main(String[] args){
  4.                 try{
  5.                         showExce();
  6.                         System.out.println("A");
  7.                 }
  8.                 catch(Exception e){
  9.                         System.out.println("B");
  10.                 }
  11.                 finally{
  12.                         System.out.println("C");
  13.                 }
  14.                 System.out.println("D");
  15.         }
  16.         public static void showExce()throws Exception{
  17.                 throw new Exception();
  18.         }
  19. }





  20. ---------------------------------------------
  21. //第二个
  22. class Demo{        
  23.         public static void func(){
  24.                 try{
  25.                         throw  new Exception();
  26.                         System.out.println("A");
  27.                 }
  28.                 catch(Exception e){
  29.                         System.out.println("B");
  30.                 }
  31.         }
  32.         public static void main(String[] args){
  33.                 try{
  34.                         func();
  35.                 }
  36.                 catch(Exception e){
  37.                         System.out.println("C");
  38.                 }
  39.                 System.out.println("D");
  40.         }
  41. }



复制代码

作者: 冬天的雪    时间: 2014-12-3 09:04
第二个throw  new Exception();下面不能有 System.out.println("A");因为执行不到
作者: Smart_lll    时间: 2014-12-3 09:32
本帖最后由 Smart_lll 于 2014-12-3 09:33 编辑

对于这个问题,毕老师上课是讲到的,你自己定义的showExce();函数,在函数上使用了throws Exception抛出异常 ,throws Exception的意思是这个函数可能抛出异常,但不一定抛出异常,调用该函数的调用者不知道showExce()中的代码,更不会知道showExce()一定会产生异常,调用者是按照可能有异常来处理的,因此后面可以有别的语句,编译时不会报错;而第二个中你写的throw  new Exception()语句,它的意思是一定会产生异常,后面的语句是不可能执行到的,因此后面是不可以跟语句的,所以编译会失败。第二个中的情况相当于是在showExce()函数中的throw new Exception();后又加了一个输出语句,即当showExce()函数改成以下代码:
public static void showExce()throws Exception{
                throw new Exception();
                System.out.println("NONONO");
        }
它也会编译失败。(以上仅是个人理解,有错误请指出,谢谢! 欢迎交流,QQ:2207706995)
作者: 小凡_fly    时间: 2014-12-3 10:11
Smart_lll 发表于 2014-12-3 09:32
对于这个问题,毕老师上课是讲到的,你自己定义的showExce();函数,在函数上使用了throws Exception抛出异 ...

谢了     膜拜ing
作者: 小凡_fly    时间: 2014-12-3 10:12
Smart_lll 发表于 2014-12-3 09:32
对于这个问题,毕老师上课是讲到的,你自己定义的showExce();函数,在函数上使用了throws Exception抛出异 ...

谢了,秒懂
作者: Smart_lll    时间: 2014-12-3 10:46
小凡_fly 发表于 2014-12-3 10:12
谢了,秒懂

能帮助你就OK!:lol
作者: SpiderManZZH    时间: 2014-12-3 11:09
在函数中抛出异常,程序就会停止运行,所以第二个会直接退出,
作者: chun    时间: 2014-12-3 11:35
;P毕老师视频里有讲到这题的,认真点看哦  25天的第十天、视频123
作者: hello_csu    时间: 2014-12-3 11:40
也在学习异常中。
作者: liuhao0324    时间: 2014-12-3 11:41
学习一下




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