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 "";
}
多一点的思考:
这两种思路各有合适的使用场景和条件。以这个方法为例,个人觉得思路二更加的简洁易用。
Exception的妙用的更多相关文章
- SharePoint API测试系列——对Recorded Item做OM操作(委托的妙用)
转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ 对Recorded Item动态调用OM Methods进行测试,界面如下: 输入Site的URL ...
- 二维码的妙用:通过Zxing实现wifi账号password分享功能
二维码是搭载信息的一种载体,通过二维码能够传递名片.网址.商品信息等,本文讲到二维码的第二种妙用:通过二维码实现wifi账号和password分享. 关于二维码的基础知识,请訪问:二维码的生成细节和原 ...
- 详解Office 外接程序 COM Add In的LoadBehavior及其妙用
Office的所有COM Add In,包括用Shared Add In模板和VSTO Add In模板创建的,都会在注表里面存储一些信息.对于当前用户安装的Add In,以Excel为例,对应的注册 ...
- Ajax技术使用之ajax与模态框结合的妙用
Ajax技术使用之ajax与模态框结合的妙用 要求: 使用ajax的方式提交数据:https://www.cnblogs.com/-wenli/p/10470063.html 使用模态框完成增加数据, ...
- httpclient妙用一 httpclient作为客户端调用soap webservice(转)
前面有一篇使用HttpClient调用带参数的post接口方法,这里找到一篇使用HttpClient调用Soap协议接口的方式. 原文地址:httpclient妙用一 httpclient作为客户端调 ...
- 详解COM Add In的LoadBehavior及其妙用
Office的所有COM Add In,包括用Shared Add In模板和VSTO Add In模板创建的,都会在注册表里面存储一些信息. 对于当前用户安装的Add In,以Excel为例,对应 ...
- Delphi三层开发小技巧:TClientDataSet的Delta妙用
Delphi三层开发小技巧:TClientDataSet的Delta妙用 转载 2014年10月13日 09:41:14 标签: 三层 / ClientDataSet 318 from :http:/ ...
- java异常类的妙用
异常类的妙用 以往在使用异常时,只是知道通过异常类的构造方法设置一些出错信息,此外最多就是把引起该异常的原因通过Throwable类的子类一同设置进去.今天在分析springSecurity3.0 ...
- python -c 妙用
前言 python -c 命令还是有用的哈 正文 python的 -c 可以在命令行中调用 python 代码, 实际上 -c 就是 command 的意思 官方文档中解释为(节选自: python ...
随机推荐
- Navicat标识为灰
Navicat Premium作为一种通用数据管理工具,非常受迎接.最近,又遇到一个小问题.即为了实现自增,需要设置主键标识,而在Navicat中发现其为灰色,不可用. 原因:Navicat不允许设置 ...
- VMware vSphere can virtualize itself + 64-bit nested guests
Running VMware ESXi inside a virtual machine is a great way to experiment with different configurati ...
- JetBrains中配置注释与代码对齐的方法
一.解决方案
- Go语言中的RPC调用
首先,说一下目录结构: 一.HttpRPC 1.建立服务文件 /*Go RPC的函数只有符合下面的条件才能被远程访问,不然会被忽略,详细的要求如下: 函数必须是导出的(首字母大写) 必须有两个导出类型 ...
- Page Visibility实现焦点丢失提醒
0.前言 HTML5 Page Visibility API是一个很实用的特性.当页面对用户不可见时,暂停播放页面中的视频.动画.声音.以及其它耗费内存的操作,等用户回来时.再继续这些操作. 当然,最 ...
- 【Linux】条件判断eq、ne、gt、lt、ge、le
整数比较: -eq(equal) 相等 -ne(inequality) 不相等 -gt(greater than) 大于 -lt(less than) 小于 -ge(greater equal) 大于 ...
- Knockout学习之表单绑定器(下)
“hasFocus”绑定 hasFocus绑定器会将DOM元素的焦点状态与视图模型中的属性相关联,当你设置视图模型中关联的属性为true或false后,将能够设置关键的DOM元素是否获得焦点. 比如下 ...
- 基于Echarts的中国地图数据展示
发布时间:2018-10-31 技术:javascript+html5+canvas 概述 基于echarts的大数据中国地图展示,结合API定制,开发样式,监听鼠标事件,实现带参数路由跳转等 ...
- ContentResolver.query()—>buildQueryString()
Cursor cursor = context.getContentResolver().query(Sms.CONTENT_URI, new String[]{"threa ...
- sikuli 如何 清空文本框中的内容??解决方法!
Screen s = new Screen(); s.click("name.png"); s.type("a",KeyModifier.CTRL); s.ty ...