java中的异常处理

首先,要理解何为异常处理,我们看下Wikipedia里面的定义:Exception handling is a programming language construct or computer hardware mechanism designed to handle the occurrence of exceptions, special conditions that change the normal flow of program execution.我们只选择我们需要的进行解释,异常处理就是解决那些会改变我们程序运行的正常流的特殊情况。
    在java的学习中,我们发现有两种异常:Exception和RuntimeException,但是在API中
,我们会看到,RuntimeException也是Exception的一个子类,而API中对RuntimeException
的解释是:RuntimeException 是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类。
有人就会问:既然RuntimeException是Exception的子类,那为什么还要将他们活生生地拆开
呢?带着这样的疑问,我wiki了一下,发现了这样一句话:If you mean, why bother making a distinction between Exceptions and RuntimeExceptions when all of RuntimeException's subclasses could inherit directly from Exception, it's because it's useful to group exceptions so you can catch several at once instead of having to catch a big list of them.也就是说,只是为了更好的将异常进行分类,你可以一次性捕获一些异常,而不是一次捕获一大串的异常,这种解释应该不能算是一个很好的答案吧,至少说服不了我,于是我google了一下,发现了一个一样纠结的大洋彼岸的哥们的问题,而有人的答案如下:all the exceptions which compiler force you to handle are directly derived from the class java.lang.Exception and all the other exceptions which compiler not force you to handle are derived from java.lang.RuntimeException。
也就是说,所有编译器强制要你去处理的异常都是来自Exception类,而没有强制要你去处理的都来自RuntimeException类,另一个跟帖说:RuntimeException是由于程序内部原因造成的,因此可以忽略。额,好吧,暂且就这样吧。至于异常的分类了,这个在API里都写得很详尽了,此处就不再赘述了。
      接下来就到了异常的处理了,我们知道,一般有两种对异常的处理方式(此处说的异常当然是checked Exceptions了):捕获和抛出。捕获就是try-catch了,而抛出就是throws了。随后要扯的问题就出来了,到底什么时候用try-catch,什么时候用throws呢?这时候另一个工具就登上舞台了:书本。是的,我打开了《Thinking in Java》,在书本里,我发现了很多和异常有关的内容,但是由于这里并不打算将书上的内容全部copy上来,什么违例控制器,违例规范等等,大家就自己看看书吧,我相信这种经典的书籍,应该是java学习者居家旅行必备佳品吧!下面就分享一些被广泛认可的异常处理原则吧:①.如果异常无法处理,就将其抛出;②.如果异常可以处理,就把它catch住;③.如果异常抛出,应该尽可能在最靠近这个异常的方法里将其catch住。其实,看到这些原则,我就一个想法:程序猿要对自己写的代码负责,尽量不给别人犯错的机会。而老胡如是说:无论是try-catch还是throws,只要你能自圆其说,就O了。当然,真正的编程中,肯定不会像说的这么轻松,我相信这是一个时间上和经验上的积累吧。
     
      其实,上面的内容看完之后,就会发现基本都是废话,有用的话基本都是google或wiki的,事实本来就是这样,很多时候,google,wiki,书本,API都能帮我们解决问题,而指望无论何时、无论何地,遇到问题就有人冒出来讲解一下的想法是对自己相当不负责任的。同时,我也不认为浏览下网页,看几篇博客能给你的知识带来多大的收益,因为网络论坛神马的大多都是浮躁的。我只想希望,如果,你google一下,如果你能发现这篇东西,它可以带给你一些东西,无论是异常还是以外的。

你可能感兴趣的:(java,异常处理)