黑马程序员技术交流社区

标题: 关于异常,这应该是一个小问题 [打印本页]

作者: 姿_`态    时间: 2014-6-17 12:01
标题: 关于异常,这应该是一个小问题
本帖最后由 姿_`态 于 2014-6-17 18:16 编辑

class ExceptionDemo1
{
        public static void main(String[] args)// throws Exception
        {
                Demo d =new Demo();
                try
                {
                        
                        int i=d.div(4,1);
                        System.out.println(i);
                }
                catch (Exception e)
                {
                        //e.printStackTrace();
                        //System.out.println(e.toString());
                        System.out.println(e.getMessage());

                }
                System.out.println("over");
               
        }
}
class Demo
{
        int div(int a,int b)throws Exception
        {
         int[] arr = new int[a];
        
         System.out.println(arr[10]);
      return a/b;
        }
}
为什么输出时  :
10
over



作者: a6217815    时间: 2014-6-17 13:04
div执行的时候异常,然后跳到catch里面告诉你角标10的元素越界,cath处理之后 接续执行 syso("over")。
作者: 姿_`态    时间: 2014-6-17 14:16
a6217815 发表于 2014-6-17 13:04
div执行的时候异常,然后跳到catch里面告诉你角标10的元素越界,cath处理之后 接续执行 syso("over")。 ...

为什么会输出10,还有难道,数组角标越界异常,java没有封装?怎么不报错
作者: 2528870651    时间: 2014-6-17 16:20
本帖最后由 2528870651 于 2014-6-17 16:22 编辑

哥们,你的程序其实已经抛出异常了,只是你的异常信息就是“10”,e.getMessage()的结果就是10,所以你才会误以为没有抛出异常。
你看看我的代码:
  1. class ExceptionDemo1
  2. {
  3.         public static void main(String[] args)// throws Exception
  4.         {
  5.                 Demo d =new Demo();
  6.                 try
  7.                 {
  8.                         
  9.                         int i=d.div(4,1);
  10.                         System.out.println(i);
  11.                 }
  12.                 catch (Exception e)
  13.                 {
  14.                         //e.printStackTrace();
  15.                         //System.out.println(e.toString());
  16.                         //System.out.println(e.getMessage().toString());
  17.                         e.printStackTrace();

  18.                 }
  19.                 System.out.println("over");
  20.                
  21.         }
  22. }
  23. class Demo
  24. {
  25.         int div(int a,int b)throws Exception
  26.         {
  27.          int[] arr = new int[a];
  28.         
  29.          //System.out.println("999");
  30.          System.out.println(arr[10]);
  31.       return a/b;
  32.         }
  33. }
复制代码


这是结果:
java.lang.ArrayIndexOutOfBoundsException: 10
        at Demo.div(ExceptionDemo1.java:31)
        at ExceptionDemo1.main(ExceptionDemo1.java:9)
over

作者: 姿_`态    时间: 2014-6-17 18:16
2528870651 发表于 2014-6-17 16:20
哥们,你的程序其实已经抛出异常了,只是你的异常信息就是“10”,e.getMessage()的结果就是10,所以你才会 ...

还真是的,不过这异常信息直接就来一个10,也太逗了。谢谢哥们
作者: 2528870651    时间: 2014-6-17 18:17
姿_`态 发表于 2014-6-17 18:16
还真是的,不过这异常信息直接就来一个10,也太逗了。谢谢哥们

没事。。
作者: 姿_`态    时间: 2014-6-17 18:18
2528870651 发表于 2014-6-17 18:17
没事。。

哥们 你这技术分都这么高了 ,怎么不去培训
作者: 2528870651    时间: 2014-6-17 18:21
姿_`态 发表于 2014-6-17 18:18
哥们 你这技术分都这么高了 ,怎么不去培训

因为我是大四的,这学期一边在搞毕业设计一边学习java,可是最近一个多月没有看了,前几天毕业答辩完了。
然后,我第二天就开始复习,可是悲剧的发现忘了好多。。。。
今天又在复习集合了。
作者: 姿_`态    时间: 2014-6-17 18:23
2528870651 发表于 2014-6-17 18:21
因为我是大四的,这学期一边在搞毕业设计一边学习java,可是最近一个多月没有看了,前几天毕业答辩完了。 ...

好吧 ,确实挺苦逼的,祝哥们早日进入黑马
作者: 2528870651    时间: 2014-6-17 18:23
我报的39期,现在在写博客,因为毕业设计以后我电脑就重装系统了,然后磁盘格式化了,里面的笔记什么的全没了,现在只能一边复习一边写了(本来打算把笔记直接当博客使的)。
作者: 2528870651    时间: 2014-6-17 18:24
姿_`态 发表于 2014-6-17 18:23
好吧 ,确实挺苦逼的,祝哥们早日进入黑马

嗯,你报的哪期啊??
作者: 姿_`态    时间: 2014-6-17 18:26
2528870651 发表于 2014-6-17 18:24
嗯,你报的哪期啊??

我大二  :'(  ,还早着呐
作者: 2528870651    时间: 2014-6-17 18:27
姿_`态 发表于 2014-6-17 18:26
我大二    ,还早着呐

嗯,大二好啊 ,加油!!
作者: 姿_`态    时间: 2014-6-17 21:06
2528870651 发表于 2014-6-17 18:27
嗯,大二好啊 ,加油!!

恩恩,加油加油
作者: a6217815    时间: 2014-6-17 21:28
姿_`态 发表于 2014-6-17 14:16
为什么会输出10,还有难道,数组角标越界异常,java没有封装?怎么不报错 ...

你的e.getMessage就是告诉你 角标10越界了,如果是输出e,才会报角标越界异常
作者: 姿_`态    时间: 2014-6-17 23:20
a6217815 发表于 2014-6-17 21:28
你的e.getMessage就是告诉你 角标10越界了,如果是输出e,才会报角标越界异常 ...

谢谢啦啊 ,明白啦




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