黑马程序员技术交流社区

标题: 遇到个小问题,求助ing。。。 [打印本页]

作者: Rockray    时间: 2013-10-30 20:11
标题: 遇到个小问题,求助ing。。。
本帖最后由 Rockray 于 2013-10-31 09:30 编辑
  1. class Demo {
  2.         public static void func(){
  3.                 try {
  4.                         throw new Exception();
  5.                         System.out.println("A");
  6.                 }
  7.                 catch(Exception e) {
  8.                         System.out.println("B");
  9.                 }
  10.         }
  11.         public static void main(String[] args) {
  12.                 try {
  13.                         func();
  14.                 }
  15.                 catch(Exception e) {
  16.                         System.out.println("C");
  17.                 }
  18.                 System.out.println("D");
  19.         }
  20. }
复制代码
上面的代码中为什么会出现如下编译错误呢?


而下面的代码一样没执行到一个输出语句,却编译通过了,这是什么原因?
  1. class ExceptionDemo {
  2.         public static void main(String[] args){
  3.                 Demo d = new Demo();
  4.                
  5.                 try{
  6.                         int f = d.div(5,0);
  7.                         System.out.println(f); //同样没被执行到,为什么编译通过了,而上面的代码编译失败
  8.                 }
  9.                 catch(ArithmeticException e){
  10.                     System.out.println(e.toString());
  11.                         System.out.println("除零啦");
  12.                 }
  13.                
  14.                 System.out.println("over");
  15.         }
  16. }
  17. class Demo {
  18.         int div(int a,int b) throws ArithmeticException {
  19.                 return a/b;   //会出现算数异常,除数不为零
  20.         }
  21. }
复制代码

作者: 未知数|X|    时间: 2013-10-30 20:28
本帖最后由 未知数|X| 于 2013-10-30 20:29 编辑

   try {

                        throw new Exception();//执行到这时就会抛出异常也就是说它下面的语句永远不会执行到的,你在它下面写 首先编译就不会通过的

                        System.out.println("A");

                }
try{

int f = d.div(5,0);//这是正常流程代码下面的会继续执行

System.out.println(f);  

}


作者: 依旧    时间: 2013-10-30 20:31
上面报错的原因是: throw new Exception();表示一定会出异常,直接跳转到catch语句处理,而执行不到下面的 System.out.println("A");语句
而 System.out.println(f); 没有报错,是因为int f = d.div(5,0); 可能出异常也可能不出异常,下面这句话是有可能执行到的System.out.println(f);所以会出现你上面的情况!
希望对你有帮助!




作者: 王东    时间: 2013-10-30 20:55
那个语句在抛出异常之后一定不会执行
作者: 硬件之家    时间: 2013-11-3 22:48
try里面你都抛了,咋行




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