A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 叶征东 中级黑马   /  2012-10-5 23:06  /  2439 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 叶征东 于 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();这句话后,输出就"不正常"了;
能为我解释下么?谢谢!


评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

10 个回复

正序浏览
这个确实是不确定的因素.
回复 使用道具 举报
难道是异常处理机制和主方法间不是用的同一个线程?
回复 使用道具 举报
冯盼 中级黑马 2012-10-6 17:35:52
9#
这应该都是正常的吧,e.printStackTrace()就是打印出堆栈中的异常信息,除零是错误的,所以打印出了错误信息
回复 使用道具 举报
叶征东 发表于 2012-10-6 16:41
是怎么改的?

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

回复 使用道具 举报
李建强 发表于 2012-10-6 12:47
还是原来位置

是怎么改的?
回复 使用道具 举报
叶征东 发表于 2012-10-6 11:02
我觉得你是把e.printStackTrace()放到最前面了
是么?

还是原来位置
回复 使用道具 举报
李建强 发表于 2012-10-6 09:38
我测试了一下,确实会出现楼主说的现象。
第一眼的感觉是多线程问题。
我觉得是输出流的原因。

我觉得你是把e.printStackTrace()放到最前面了
是么?
回复 使用道具 举报
本帖最后由 李建强 于 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, 下载次数: 41)

61d52794jw1dwutqserknj.jpg

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 我是给图片加分的

查看全部评分

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

你的这个也是不正常的;
从你的输出结果来看, e.printStackTrace()是在System.out.println(e.toString())前面的
但是实际上e.printStackTrace()是在System.out.println(e.toString())后面的
如果无法解释就可以用人品和长相来解释的话
这个社会就和谐了,
回复 使用道具 举报
我脚得~~一般这种人类无法解释事件的原因都可以用人品问题和长相问题来解释


评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 我觉得你人品不错

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马