我相信很多初次接触Java的朋友,在遇到一些IDE提示需要用try…catch包围的代码块的时候都会困惑,用try…catch包围的意义在哪?尤其是从C/C++转到Java的朋友,可能对个问题尤其敏感。我一开始也对这种机制非常不理解,他的缺点如下:
冗杂的语法对于初次接触的朋友并不友好使得语句相对割裂,不容易阅读与理解迫使部分变量的定义与赋值分开,使变量定义比较混乱形象运行效率
但是这样的一个机制,如果没有其绝对的优势,必然不会被留在如此安全与缜密的Java中,当我们怀着这样的问题,试图理解这个机制的用意去百度的时候,我们会得到类似这样回答
(来自CSDN@我叫向同学 侵删)
这些大佬很详细的解答了什么是Java的异常处理,以及try…catch的作用
但是对于没有经验的程序员,可能很难get到,为什么要用这样的一个机制
包括在课堂上,老师可能会教你什么是错误处理,怎么用错误处理。什么情况下用错误处理,但是我觉得一般老师都不会告诉你,Java为什么要设计错误处理机制
经过一段时间的学习之后,我才明白,错误处理,最大的用处是用来调试,用来方便的发现问题,更进一步的来讲,是为了安全
什么样的错误是最头疼的呢?有算法竞赛经验或者开发经验的朋友可能会说,是结果错误。可能缺少经验的朋友会看到编译器报出的一长串的error兴叹,但是,对于有经验的程序员来说,这无疑是最好的结果。如果一个程序通过了调试,却在运行的时候因为异常而中断了,那么他大概率会非常头疼。如果这个程序是不稳定难以复现的爆出错误,我估计这位朋友很难抑制住自己想要飙脏话的心情。最恐怖的莫过于程序没有任何报错,但是却产生了错误或者意料之外的结果,恐怕这位朋友会当场疯掉。
这就是异常处理的用处,即通过强迫你使用try…catch式的结构,让错误在编译或运行时就被发现,并且代配catch中适当的代码,来定位错误并且打印错误的原因。这样做的效果是立竿见影的,我在使用C++编写程序时,一个bug经常得使用vs强大的调试功能反复修改,而在Java中,只要我的搭档在使用我的API时产生了任何运行时错误,我都可以根据错误信息用肉眼debug,找出并解决问题。通过合理的使用assertion和e.printStackTrace()等方法,我们可以快速的定位与解决bug。
毕竟,Java的目标,是使用Java设计出好的程序,而非快的程序。这种错误处理机制,正是Java追求安全与精密而产生结果