前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >由异常处理引出的对沟通和学习的思考

由异常处理引出的对沟通和学习的思考

作者头像
明明如月学长
发布2021-08-31 15:19:53
3440
发布2021-08-31 15:19:53
举报
文章被收录于专栏:明明如月的技术专栏

一、背景

技术群里有朋友提问 “ 出现了三个会出现IOException异常的方法,是统一使用一个try/catch 进行捕获,还是分别进行捕获。”

@春少 和我的想法一致 如果不需要特殊处理统一处理即可。

但是我发现问题的核心是他日志打印的是e.getMessage,没有打印堆栈信息,导致无错误行数的提示。

然后误认为只有单独try catch才能更清楚地知道哪一行。

本文将介绍怎么解决这个问题,更重要的是这个问题对我们的沟通和学习的启发。

二、方法

我见过的常见处理方法有以下几种

2.1 不处理

不处理就会报错,然后触发error日志的打印

2.2 异常统一处理

将异常统一封装成前端可识别的信息,而不是直接500.

2.3 通过工具类将异常对象打印出来

两种方式:

代码语言:javascript
复制
// 打印完整异常信息

log.error("xxx失败,e:{}", JSON.toJSONString(e)); 

// 只打印堆栈(推荐这一种) 

log.error("xxx失败,e:{}", ExceptionUtils.getStackTrace(e)); 

一种是用fastjson的工具

一种是利用commons-lang3 工具类

代码语言:javascript
复制
    org.apache.commons
    commons-lang3
    3.8.1

就此打住??no 

虽然这个问题很简单,但是之前介绍过,《原 The more you think, the more you will learn

我们要有不知足的心态,我们要有尽可能主动获取想要的知识的能力。 学习是一种能力,学习是一种习惯,学习是一种态度!

我们抓住这个学习的机会,既然这个问题暴露出我们对异常不够熟悉,为何不去趁机系统了解一下呢?

三、Learn More

3.1 我们可以了解异常的结构

去Exception类和Throwable类查看常见的属性和函数的含义。

具体自己去看。

3.2 可以看看 ExceptionUtils.getStackTrac的源码为啥可以打印堆栈 ?

源码版本:3.8.1

发现本质是调用了 java.lang.Throwable#printStackTrace(java.io.PrintWriter)函数

4、思考

4.1 提问的艺术

最后可以发现,提问者真正需要的并非自己问的问题。

因此提问者最好明确自己的问题是什么,最核心想要的是什么。

如果开始就明确“我想打印异常的行数,打印的都是错误的简要信息没有行数为啥?”,这个问题就简单明了了。

另外作为程序员,通过这个问题我们不仅要反思自己是否有类似的问题,思考自己是否能够说到问题的本质。

如果不能先想好再提问。

另外和别人交流的时候要搞清楚对方真正想要的是什么。尤其是和产品过需求的时候。

这是工作中交流的一种技能,而不仅仅是针对这个问题。

4.2 学习的艺术

我们不要止步于知道答案,遇到困惑某种程度上是因为基础掌握的不够扎实。

我们要趁着这个几乎将这一块知识系统过一遍。

比如Json结构定义错了,说明对json的理解不够透彻;比如lombok的注解的效果和自己想的不一样,说明对lombok不够熟悉,可以趁机系统掌握一下。

我们开发过程中极少主动跟到源码里去学习和梳理为什么。这点主动性很重要,决定你是否可以学的更多,决定你进步的速度。

5、总结

本文绝不仅仅是为了分享这个简单的问题,而是通过一个问题,讲述了沟通的艺术,学习的方法。

让大家可以从中学到更本质的东西,从中学到对工作和学习更有帮助的方法层面上。

本文尝试提供一种带有我个人理解的学习的模式,希望对大家有帮助。

创作不易,如果觉得本文对你有帮助,欢迎点赞,欢迎关注我,如果有补充欢迎评论交流,我将努力创作更多更好的文章。 另外欢迎加入我的知识星球,知识星球ID:15165241 一起交流学习。 https://t.zsxq.com/Z3bAiea  申请时标注来自CSDN。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/06/07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、背景
  • 二、方法
    • 2.1 不处理
      • 2.2 异常统一处理
        • 2.3 通过工具类将异常对象打印出来
          • 3.1 我们可以了解异常的结构
            • 3.2 可以看看 ExceptionUtils.getStackTrac的源码为啥可以打印堆栈 ?
            • 4、思考
              • 4.1 提问的艺术
                • 4.2 学习的艺术
                • 5、总结
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档