java 解决故意弄得错误_手把手教你学习Java异常机制和如何一步步排除解决bug

手把手教你学习Java异常机制和如何一步步排除解决bug

手把手教你学习Java异常机制和如何一步步排除,解决bug!

原创声明:近期发现在关键字搜索我的文章时,发现很多文章被其他网站直接一字不落的拿去。在这里我先谢谢大家对我写的内容的肯定,我也会继续努力。但是,很多网站连标明都未标明来源,这就让人很可气,毕竟每一篇文章都是我一个字一个字敲出来的。我也不是在抱怨什么,只是希望那些某些站长在“转载”他人文章时标明来源,注明作者。不要只是简单的一个来源互联网。万分感谢。

此外,本站文章如未标注文章来源,则均为作者原创,请转载附上原文链接,并声明作者。保护原创,从我做起,谢谢合作。

如果是我的项目的话,源码会全部上传到我的Github,大家有需要的可以拿去研究,也可以我们一起交流探讨。最后,祝愿每一个默默努力的人都可以取得理想的结果。

-----------吃土少年8

Java的异常机制:

对Java的程序运行状态进行监控,在出现异常后,自动捕获异常信息,并调用异常处理逻辑,对异常进行处理的机制。

异常处理机制会作为守护线程,来陪伴程序运行。收集异常信息,根据异常的类型,创建对应的 Exception对象,封装本次异常的信息。

获取方法的执行权,方法不再向下执行,而是向上寻找处理异常的逻辑-> catch语句块。这个寻找是层层向上寻找:当前方法中如果没有处理逻辑,则将 Exception对象发送给方法调用者,在其中查找处理逻辑,如

果还是没有,则继续向上找。

如果本程序中都找不到异常处理逻辑,该异常会被抛给JVN,JVM会结束产生异常的线程,将异常信息输出在控制台上。

如果该异常得到正常处理,则原程序后续的代码会继续执行。

try / catch 语句块

开发者可以使用try语句块包裹可能出现异常的代码,然后在ty语句块后

添加 catch语句块,指定要捕获的异常类型,并在 catch语句块中添加异常

的处理逻辑。

异常处理逻辑:

异常的具体处理逻辑分为2类:

通用性的处理逻辑:显示或记录异常的信息,显示异常信息到控制台:e.printStackStrace();该方法会将异常的详细信息以红色文字输出到控制台,记录异常信息:调用日志插件的方法 LogUtil log("…")。

2.结合当前情况的处理逻辑。

Java中的异常分类:

Throwable:所有异常和错误类的父类

Exception:异常 —>表示代码中出现的异常,一般和代码或配置有关,和开发者有关。

Error:错误 ---->表示系统错误,一般和程序运行的大环境有关与开发者关系较小。

编译异常(受检异常):这类异常是Java编译器强制要求开发者必须提供异常处理逻辑的异常。如SQLEception、IOException等等。如果你的代码或者你调用的方法可能“编译异常”,必须在代码中显式提供处理逻辑:

在方法前添加 Throws语句,表示本方法不处理该异常,交给方法的调用者去处理。

使用ty- catch包裹代码,在 catch中添加处理逻辑。

运行时异常(非受检异常):这类异常不强制必须在编译时进行处理的异常。如NullException等等。也就是说,如果开发者调用的方法或者编写的代码可能出现 Runtime Exception或其子类异常时,编译器不会提醒开发者必须提供处理逻辑。特别注意!出现运行时异常不处理,JVM也会直接停掉出异常的线程。

异常处理的设计机制:所有的运行时异常( RuntimeException),都是可以通过提高代码的严谨性和逻辑性来解决的,因此,没有必要提醒开发者。而编译时异常,往往是开发者再严谨,也可能出现的异常。

学习了Java的异常处理原理之后,我们就有必要来学习一下如何处理异常,怎么找,怎么改?

故意制造bug,来分析,我们拿最近用的JDBC的代码来体验描述异常!

随便手写一个Java程序,我拿我的举列子。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5nKGQyxN-1592221989397)(https://img.99couple.top/20200615192846.png)]

是不是提示你有未解决得SQL异常,这是不是我们说的编译异常(受检异常),是不是提示你的解决方法有两种,是不是我们说的那两种。相信你看到这了一定秒懂了。

a1c1da34dfb644aec38f6e735691e4f7.png

3332555d767717cf24034867c99e2188.png

我们用第一种往上抛,运行后发现还是会报错。报错如下图。这就告诉我们要养成习惯,有问题想着去解决(利用try / catch 在catch语句块中添加逻辑),不要想着光往上抛,往上抛只是单纯的不报错了,但是实际上还是有问题的。刨到最后就到了JVM那里,到了那里就是有问题就杀死你!将你的临时变量全部清理掉,不管对于你是否重要。不管三七二十一。(JVM想的是你敢抛我就敢扔,看看谁更渣)如果到了实际工作中,就会产生不可估计的损失。我们必须要对重要临时变量进行持久化保存!

e020df983784593ac7ad9244f584301e.png

下面是运行时异常,我们代码在编写时没有问题,没有报错信息,也不用try / catch,但是在运行时却出了问题。如下图:

306ed35c3c114d2c518104964e481cbb.png

到这里是不是分清楚了Java异常!接下来我们了解一下Throwable类的源码中的三个重要属性:

detailMessage:封装的异常产生的原因,字符串形式的文字描述,也是排bug时最应该看的东西。

stackTrace:方法的调用轨迹,根据这个内容我们可以逐步锁定是哪个方法的哪行代码出了问题。

cause:导致当前异常的原因(异常)在有些情况下,当前异常是由另一个异常导致的, cause变量用于关联导致当前异常的那个异常对象,如果没有,默认指向自己。

350abd34ee6d37b5aca034dd22b3c960.png

dbdc78f6ea8c8bdeabacd934fb9feab1.png

93ab7098b7c19e20435c07ea9e9e032b.png

接下来我们利用三个例子来学习如何排bug!

ec0f7b4965965d534b991e2f12e1dd80.png

手把手教你学习Java异常机制和如何一步步排除解决bug相关教程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值