关注我,每天三分钟,轻松掌握一个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方法 这是为了支持多态。
以上就是今天分享的全部内容了,创作不易,希望大家多多关注,收藏,评论支持,谢谢大家!举报/反馈
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
8. 精力有限,不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别
丞旭猿论坛
暂无评论内容