黑马程序员技术交流社区

标题: 关于异常的问题 [打印本页]

作者: 叶征东    时间: 2012-10-5 23:06
标题: 关于异常的问题
本帖最后由 叶征东 于 2012-10-6 23:27 编辑

package day09;
public class ExceptionDemo_6 {
          public static void main(String[] args) {
                    Demo_6 d = new Demo_6();
                    try {
                              int x = d.div(4, 0);
                              System.out.println(x);
                    } catch (Exception e) {
                              System.out.println("除零啦!!");
                              System.out.println(e.getMessage());
                              System.out.println(e.toString());
                              e.printStackTrace();

                    }
                   System.out.println("over");
         }
}
class Demo_6 {
        public int div(int a, int b) {
                   return a/b ;
        }
}

当我把e.printStackTrace();这句话注释后,输出是这样的




当不注释e.printStackTrace();时,输出就有点不正常了

甚至还会出现这样的:


为什么加上了e.printStackTrace();这句话后,输出就"不正常"了;
能为我解释下么?谢谢!



作者: 黄小贝    时间: 2012-10-6 02:43
我脚得~~一般这种人类无法解释事件的原因都可以用人品问题和长相问题来解释



作者: 叶征东    时间: 2012-10-6 08:53
本帖最后由 叶征东 于 2012-10-6 09:06 编辑
黄小贝 发表于 2012-10-6 02:43
我脚得~~一般这种人类无法解释事件的原因都可以用人品问题和长相问题来解释

你的这个也是不正常的;
从你的输出结果来看, e.printStackTrace()是在System.out.println(e.toString())前面的
但是实际上e.printStackTrace()是在System.out.println(e.toString())后面的
如果无法解释就可以用人品和长相来解释的话
这个社会就和谐了,

作者: 李建强    时间: 2012-10-6 09:38
本帖最后由 李建强 于 2012-10-6 09:40 编辑
  1.                      catch (Exception e) {
  2.                               System.out.println("除零啦!!");
  3.                               System.out.println(e.getMessage());
  4.                               System.out.println(e.toString());
  5.                               e.printStackTrace(System.out);
  6.                     }
复制代码
我测试了一下,确实会出现楼主说的现象。
第一眼的感觉是多线程问题。
我觉得是输出流的原因。
e.printStackTrace();这个是调用的错误流。
而打印System.out.println("over");这个是使用的标准输出流。
你改成这样就可以了.
测试多次没问题。
发错图片了,但是看了看挺好,不改喽~

61d52794jw1dwutqserknj.jpg (142.99 KB, 下载次数: 38)

61d52794jw1dwutqserknj.jpg

作者: 叶征东    时间: 2012-10-6 11:02
李建强 发表于 2012-10-6 09:38
我测试了一下,确实会出现楼主说的现象。
第一眼的感觉是多线程问题。
我觉得是输出流的原因。

我觉得你是把e.printStackTrace()放到最前面了
是么?
作者: 李建强    时间: 2012-10-6 12:47
叶征东 发表于 2012-10-6 11:02
我觉得你是把e.printStackTrace()放到最前面了
是么?

还是原来位置
作者: 叶征东    时间: 2012-10-6 16:41
李建强 发表于 2012-10-6 12:47
还是原来位置

是怎么改的?

作者: 李建强    时间: 2012-10-6 16:49
叶征东 发表于 2012-10-6 16:41
是怎么改的?

e.printStackTrace()
修改后e.printStackTrace(System.out);


作者: 冯盼    时间: 2012-10-6 17:35
这应该都是正常的吧,e.printStackTrace()就是打印出堆栈中的异常信息,除零是错误的,所以打印出了错误信息
作者: 黑马连家华    时间: 2012-10-6 23:05
难道是异常处理机制和主方法间不是用的同一个线程?
作者: AngieFans85    时间: 2012-10-7 14:44
这个确实是不确定的因素.




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