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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wisely 中级黑马   /  2014-7-27 00:50  /  1241 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

看视频的时候,毕老师一直强调不要抛异常,尽量try_catch,但try_catch也没用啊,照样处理不了异常,那这两者的分别到底在哪里。

难道是为了一个将异常展现在编译器?

3 个回复

倒序浏览
这个就有对异常进行处理:
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。你觉得没什么区别,可能是你还没能力去处理自己当前碰到的区别,或者说,还没理解完全吧。
回复 使用道具 举报
呵呵  毕老师叫你自己处理异常  不是抛出来  让别人来处理  或直接在控制台显示出来
回复 使用道具 举报
如果只写 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 ,可以用来记录错误日志
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马