黑马程序员技术交流社区

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

作者: wisely    时间: 2014-7-27 00:50
标题: 关于异常的问题
看视频的时候,毕老师一直强调不要抛异常,尽量try_catch,但try_catch也没用啊,照样处理不了异常,那这两者的分别到底在哪里。

难道是为了一个将异常展现在编译器?
作者: star5603    时间: 2014-7-27 09:37
这个就有对异常进行处理:
public static void main(String[] args) {
               
                Scanner in = new Scanner(System.in);
                boolean flag = true;//标记
               
                do {
                        try {
                                System.out.println("Enter a integer:");
                                int num = in.nextInt();
                                System.out.println("num:" + num);
                                //只要输入的数为正数,则循环结束
                                flag = false;
                        } catch (Exception e) {
                                System.out.println("the num is not a integer!");
                                in.nextLine();
                        }
                } while (flag);
        }

抛的话,只能告诉调用者有异常,有能力就处理,处理方式就是try-catch。你觉得没什么区别,可能是你还没能力去处理自己当前碰到的区别,或者说,还没理解完全吧。
作者: 黑马小基520    时间: 2014-7-27 09:45
呵呵  毕老师叫你自己处理异常  不是抛出来  让别人来处理  或直接在控制台显示出来
作者: icris    时间: 2014-7-27 13:11
如果只写 e.printStackTrace(); 确实没区别,但有时候可以做一些别的事,比如想接收一个 int 类型做计算,又不想接收负数,可以用一些小技巧,比如:
  1. for (;;) {
  2.         try {
  3.                 System.out.println("请输入数字:");
  4.                 i = scanner.nextInt(); // 接收键盘输入的 int 型并存入变量 i 中
  5.                 if (i < 0) {
  6.                         throw new Exception(); // 如输入小于 0 的数,视为错误输入
  7.                 }
  8.                 break;
  9.         } catch (Exception e) {
  10.                 System.out.println("您可能输入了错误的字符。");
  11.                 scanner.nextLine();
  12.         }
  13. }
复制代码

处理一般错误的时候也可以手动在 catch 里面抛出新异常,如:
  1. throw new RuntimeException("new RuntimeException");
复制代码

可以自定义错误信息,帮助找到错误的代码位置。
另外 e.printStackTrace() 有重载方法,可以接收 PrintWriter 和 PrintStream ,可以用来记录错误日志





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