欢迎大家来到IT世界,在知识的湖畔探索吧!
关注我,每天三分钟,轻松掌握一个java知识点。
异常机制是程序正常退出的一种机制,异常机制提供了程序退出的安全通道,当出现错误后,程序执行的流程发生改变,程序的控制权转移到异常处理器。
如图,Throwable分为Error和Exception。
粗略的解释的话,Error是java程序运行中不可预料的异常情况,这种异常发生以后,会直接导致JVM不可处理或者不可恢复的情况。
Exception是java程序运行中可预料的异常情况,可以获取到这种异常,并且对这种异常进行业务外的处理。
Exception又分为检查异常(RuntimeException)和非检查异常(IOException,ClassNotFoundException),其中非检查异常时我们平时编码经常用到,今天重点讲讲非检查异常。
我们在编码中,一般是用 try-catch-finally, throw, throws 这些关键字,他们都都什么时候使用呢?
try-catch-finally:捕获异常并处理。
throw:遇到错误的时候抛出一个异常,可以自定义。
throws:用来声明一个方法可能抛出的所有异常信息,throws是将异常声明但是不处理,而是将异常往上传。
在方法抛出异常之后,运行时系统将转为寻找合适的异常处理器(exception handler)。潜在的异常处理器是异常发生时依次存留在调用栈中的方法的集合。
当异常处理器所能处理的异常类型与方法抛出的异常类型相符时,即为合适的异常处理器。运行时系统从发生异常的方法开始,依次回查调用栈中的方法,直至找到含有合适异常处理器的方法并执行。当运行时系统遍历调用栈而未找到合适的异常处理器,则运行时系统终止。
在使用异常的时候,也要特别注意,什么时候该把异常抛到调用类,什么时候自己try-catch。我曾经系统出了一个异常,看日志就是提示普通的XXX异常,各种找,最后发现是某位小伙伴自己在程序中catch住了,只是通过日志很难找到。
所以小伙伴们涉及到异常的问题时,要多思考这个异常如果出现我是需要抛给上层程序解决,还是需要在方法内try-catch。
再有就是几条关于异常的建议:
1.try块中的局部变量和catch块中的局部变量(包括异常变量),以及finally中的局部变量,他们之间不可共享使用。
2.finally最好用来释放资源关闭流就可以了,不要写过多的业务代码进去。
3.将尽量将所有的return写在函数的最后面,而不是try … catch … finally中。
4.如果使用多catch,子类异常放前面,父类异常仿后面,因为异常匹配是按照catch块的顺序从上往下寻找的。
5.当子类重写父类的带有 throws声明的函数时,其throws声明的异常必须在父类异常的可控范围内——用于处理父类的throws方法的异常处理器,必须也适用于子类的这个带throws方法 。这是为了支持多态。
以上就是今天分享的全部内容了,创作不易,希望大家多多关注,收藏,评论支持,谢谢大家!
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/37366.html