zoukankan      html  css  js  c++  java
  • Exception的妙用

    实际工作中遇到的一个例子:

    一、看这样一个方法:

    /** 传入以微秒(us)为单位的时间字符串,转换成可读的(年-月-日 时:分:秒)日期格式*/

        public String getDateStringByUSString(String usStr) {
            long time = Long.parseLong(usStr.substring(0, usStr.length() - 3));
            Date dateInd = new Date(time);
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            return sdf.format(dateInd);
        }

    1. 传入正常的字符串,一切都没问题。

    e.g.

    getDateStringByUSString("1533784565802862");
    2018-08-09 11:16:05

    2. 但是传入异常的字符串,各种抛出:

    e.g.

    getDateStringByUSString("11");

    抛出:
    Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
    at java.lang.String.substring(String.java:1967)
    at com.tuniu.cc.auto.call.util.DateUtil.getDateStringByUSString1(DateUtil.java:33)
    at com.tuniu.cc.auto.call.util.DateUtil.main(DateUtil.java:53)
    getDateStringByUSString("abcd")
    抛出: Exception in thread
    "main" java.lang.NumberFormatException: For input string: "a" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.lang.Long.parseLong(Long.java:589) at java.lang.Long.parseLong(Long.java:631) at com.tuniu.cc.auto.call.util.DateUtil.getDateStringByUSString1(DateUtil.java:33) at com.tuniu.cc.auto.call.util.DateUtil.main(DateUtil.java:53)

    如果抛出没有处理,那程序可就华丽丽的出BUG了。怎么防止这些抛出呢?


    思路一:防止抛出

    在调用这个方法时,对入参做判断:如果不符合条件,就不给调用该方法。这样在已考虑到的合法逻辑内不会有抛出。

    思路二:处理抛出

    随便输入参数,但是捕获抛出,实现软着陆。

    添加抛出处理逻辑的代码如下:

        public String getDateStringByUSString(String usStr) {
            try {
                long time = Long.parseLong(usStr.substring(0, usStr.length() - 3));
                Date dateInd = new Date(time);
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                return sdf.format(dateInd);
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
            return "";
        }

    多一点的思考:

    这两种思路各有合适的使用场景和条件。以这个方法为例,个人觉得思路二更加的简洁易用。

  • 相关阅读:
    不打无准备之仗,最全868道Java面试题及答案
    准备两个月,面试五分钟,Java岗面试为何越来越难?
    2020JAVA面试必备的26个关键知识点,刷完大厂随便跳
    2020年最全java面试真题解析(980道),你没见过的面试题都在这
    java大厂面试200+(含答案):基础+缓存+网络+分布式....
    判断js中的数据类型的几种方法
    JPG、PNG、GIF、SVG 等格式图片区别
    js闭包
    什么是 js 变量提升 (Javascript Hoisting)
    js函数声明和函数表达式的区别
  • 原文地址:https://www.cnblogs.com/yoyotl/p/9507700.html
Copyright © 2011-2022 走看看