大家好,我是IT修真院深圳分院第5期学员,一枚正直善良的JAVA程序员。
今天给大家分享一下,修真院官网JAVA任务1中,深度思考部分的知识点——Spring中的IOC是什么意思,为什么要用IOC而不是New来创建实例?
一、背景介绍
1、什么是异常
异常就是程序运行中出现的不正常情况,在Java代码中,异常出现就会阻止当前方法或作用域继续执行
2、Java异常处理机制
如果某个方法不能按照正常的途径完成任务, 就可以通过另一种路径退出方法。 在这种情况下会抛出一个封装了错误信息的对象。 此时,这个方法会立刻退出同时不返回任何值。 另外,调用这个方法的其他代码也无法继续执行, 异常处理机制会将代码执行交给异常处理器。
二、知识剖析
异常分类
1、检查型异常:例如java.lang.IOException 程序正确,但因为外在的环境条件不足而引发。例如程序视图打开一个不存在的远程端口或者是打开不存在的文件时,这不是程序本身的逻辑错误,很可能是远程机器名字错误(用户拼写的路径错误),这种异常Java编译器是要求强制处理的,如果不捕获这类异常,程序将不能通过编译。
2、(非检查型)运行期异常:java.lang.RuntimeException 意味着程序存在逻辑错误,比如数组越界,除数为0,入参不满足规范.....这类异常需要更改程序配置来避免。
3、错误:java.lang.Error 一般开发过程中不多见,遇到了也很难通过调试程序来解决。他的出现更多是源于环境的问题,错误在程序中无需处理,而由运行环境处理
这三个异常类的顶层都是java.lang.Throwable类,检查型异常,运行期异常,错误都是这个类的子类。
Java异常处理涉及到五个关键字,分别是:try、catch、finally、throw与throws
1.try:它里面放置可能引发异常的代码
2.catch:后面对应异常类型和一个代码块,用于表明该catch块用于处理这种类型的代码块,可以有多个catch块。
3.finally:finally关键字保证无论程序使用任何方式离开try块,finally中的语句都会被执行,它相当于一个万能的保险,即使前面的try块发生的异常没有对应的catch块来捕获,finally块也能马上执行。
4.throw与throws都是将异常抛出,具体使用看代码
三、常见问题
1、如何使用这些关键字来对代码中的异常进行出处理呢?
2、Java也不可能做到穷举所有异常可能出现的情况,出现Java提供的异常类之外的异常该如何处理呢?
4.解决方案
1、代码演示关键字用法
2、自定义异常类
五、编码实战
六、扩展思考
异常机制在实际开发中使用时应该注意哪些地方呢?
1、处理异常。针对该异常采取一些行动,例如修正问题、提醒某个人或进行其他一些处理,要根据具体的情形确定应该采取的动作,所以很多时候调用printStackTrace()算不上已经“处理好了异常”。printStackTrace的堆栈跟踪功能显示出程序运行到当前类的执行流程,但只提供了一些最基本的信息,未能说明实际导致错误的原因,同时也不易解读。 因此,在出现异常时,最好能够提供一些文字信息,例如当前正在执行的类、方法和其他状态信息,包括以一种更适合阅读的方式整理和组织printStackTrace提供的信息。
2、切忌用一个catch语句捕获所有的异常。最常见的情形就是使用catch(Exception ex)语句。在绝大多数情况下,这种做法不值得提倡。所以在catch语句中尽可能指定具体的异常类型,必要时使用多个catch。
3、如果程序用到了文件、Socket、JDBC连接之类的资源,即使遇到了异常,也要正确释放占用的资源。所以还要充分运用finally关键词
4、应尽量减小try块的体积,我们常常习惯把大量的代码放入单个try块,然后再在catch语句中声明Exception,而不是分离各个可能出现异常的段落并分别捕获其异常。这种做法为分析程序抛出异常的原因带来了困难,因为一大段代码中有太多的地方可能抛出Exception。
5、当执行循环的过程中抛出了异常,要仔细分析并全面考虑可能出现的异常以及这些异常对执行流程的影响,对已经输出但不完全的数据要做好应对措施,否则使用数据的人或者设备收到一份不完整的数据,却得不到任何有关这份数据是否完整的提示,网网比异常导致的系统停止运行带来的损失更大
七、参考文献
1.CSDN博客:http://swiftlet.net/archives/998
2.CSDN博客:http://blog.csdn.net/zxman660/article/details/7799827
八、更多讨论
Q1、finally关键词正确的使用姿势是什么?
3、如果程序用到了文件、Socket、JDBC连接之类的资源,即使遇到了异常,也要正确释放占用的资源。所以还要充分运用finally关键词
Q2、可以同时try住几个可能出现异常的位置吗?
4、应尽量减小try块的体积,我们常常习惯把大量的代码放入单个try块,然后再在catch语句中声明Exception,而不是分离各个可能出现异常的段落并分别捕获其异常。这种做法为分析程序抛出异常的原因带来了困难,因为一大段代码中有太多的地方可能抛出Exception。
Q3、还应该注意那些情况?
5、当执行循环的过程中抛出了异常,要仔细分析并全面考虑可能出现的异常以及这些异常对执行流程的影响,对已经输出但不完全的数据要做好应对措施,否则使用数据的人或者设备收到一份不完整的数据,却得不到任何有关这份数据是否完整的提示,网网比异常导致的系统停止运行带来的损失更大
今天的分享就到这里啦,欢迎大家提问和探讨!
PPT:PPT
感谢大家观看
今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~
技能树.IT修真院
“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。
这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。快来与我一起学习吧~
作者:东
链接://www.greatytc.com/p/5def26bc258b
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。