首页 > 编程语言 > 详细

Java异常By荼荼小蘼

时间:2015-01-25 02:02:12      阅读:296      评论:0      收藏:0      [点我收藏+]

本文参考Link--浅谈Java异常

?

何谓Java异常,阻止当前方法或作用域继续执行的问题。

?

Java的异常体系:Throwable是Java语言中所有错误或异常的超类(包含一切可抛的东西)。他有两个子类,Error和Exception。

?

Error:用于指示合理的程序不应该试图捕获的严重问题。比如说VirtualMachineError,当JVM崩溃或用尽了他继续操作所需的资源,抛出该错误。

?

Exception:分为两大类--

Runtime Exception(也叫Checked Exception)

Unchecked Exception(非Runtime Exception)

?

异常处理方法

处理方式1:将异常捕获try...catch

处理方式2:将异常继续向外抛出

?

异常的使用

? ?Case 1:

try
    {
         // 可能发生异常的代码
        // 如果发生了异常,那么异常之后的代码都不会被执行
    }
    catch (Exception e)
    {
        // 异常处理代码
    }
    finally
    {
        // 不管有没有发生异常,finally语句块都会被执行
    }

?

? Case 2: 重新抛出异常

? ? ? 原封不动的把这个异常抛给上一级,抛给调用这个方法的人,让他伤脑筋去吧。

?

? Case 3:异常链的使用及丢失

? ? ?为了避免异常链丢失,可在抛出异常前,调用initCause()初始化改异常的原因,这样在调用e.printStackTrace()时,会将上一层的异常也打印出来。

? ? ? ? 如: e.initCause(a);

?

? Case 4: 清理工作

? ? ? 如果一些消耗资源的操作,如IO、JDBC,用完之后没有及时正确的关闭,那后果会很严重,意味着内存的泄露。

public void readFile() {
        BufferedReader reader = null;
        try {
            try {
                reader = new BufferedReader(new InputStreamReader(
                        new FileInputStream("file")));
                // do some other work
 
                // close reader
            } finally {
                reader.close();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

?

? Case 5: 异常的误用

? ? ? 有些人喜欢直接用一个Exception来捕捉所有的异常,这是其实是最傻最二的方法了,根本无法分清是由什么引起的异常。

? ? ? 异常时程序处理意外情况的机制,当程序发生意外时,我们需要尽可能多的得到意外的信息,包括发生的位置,描述,原因等等。这些都是我们解决问题的线索。如果我们自己写代码,应尽可能多的对这个异常进行描述,比如说为什么会出现这个异常,什么情况下发生这个异常。如果传入方法的参数不正确,告知什么样的参数是合法的参数,或者给出一个Sample。

? ? ? 还有一点,应将try block写的简短,不要将所有的东西都扔在这里。尽可能分析出是哪几行代码可能出现异常,只对可能出现异常的代码进行catch。尽量为每一个异常都写一个try...catch,避免异常丢失。因为一个try后面的多个catch中,最多只会有一个catch块被执行。

?

Case 6:try块中有return语句时, 仍然会首先执行finally块中的语句,然后方法返回。

? ? ? ? ? ? ? 如果try块中存在System.exit(0)语句,那么就不会执行finally块中的代码,因为System.exit(0)会终止当前运行的JVM,程序会在JVM终止前结束执行。

Java异常By荼荼小蘼

原文:http://tummyling.iteye.com/blog/2179351

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!