A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 沉湎码海 中级黑马   /  2017-2-12 10:26  /  933 人查看  /  3 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

Java的异常机制:


Java的异常机制主要依赖于:try 、 catch、finally、throw和throws 五个关键字。

其中:

        try关键字后紧跟一个花括号括起来的代码块,简称try块,它里面放置可能引发异常的代码。
       
        catch关键字后对应异常类型和一个代码块,用于表明该catch块用于处理这种类型的代码块。
       
        finally块用于回收再try块中打开的物理资源,异常机制会保证finally块总被执行。
       
        throws关键字主要在方法签名中使用,用于表明该方法可能抛出的异常。
       
        throw 关键字用于抛出一个实际的异常,throw可以作为一个单独的语句使用,抛出一个具体的异常对象。
       
       
       
       
二、

        “
                Java的异常处理机制可以让程序具有更好的容错性,让程序更加健壮。
                当程序运行出现意外情形时,系统会自动生成一个Exception对象来通知程序,
                从而实现将“业务功能实现代码”和“错误处理代码”分离,提供更好的可读性。
               
               
               
        ”
       
       
       
问题:  那么,Java异常机制要怎么设计才能实现把        “业务功能实现代码”和“错误处理代码”分离呢?


分析:
                即:如果程序一切正常就执行业务实现逻辑,否则即:如果出现了异常情况,就执行错误处理逻辑
        我们用一段伪码描述:
       
        if(一切正常)
        {
               
                执行业务实现代码;
        }else  {
               
                执行错误处理逻辑代码;
        }
       
为了描述上面的功能,Java是是这样做的:java 定义了try 和catch关键字。把系统的业务实现代码放在try块中,把异常处理逻辑放在catch块中进行处理。

try{
       
        执行业务实现代码;
}catch(Exception e){
       
        执行错误处理逻辑代码;
}
       
       
       
       
       
三、异常对象

如果执行try块里的业务实现逻辑代码时出现异常,系统自动生成一个异常对象,
该对象被提交给Java运行时环境,这个过程被称为抛出(throw)异常。

当Java运行时环境受到异常对象时,会寻找能处理该异常对象的catch块,
如果找到合适的catch块,就把该异常对象交给该catch块处理。
如果Java运行时环境找不到捕获异常的catch块,则运行时环境终止,Java程序也将退出。





       




               
        Java处理异常的工作流程:

                1.如果执行try块里的业务逻辑代码块时出现异常,系统就会自动生成一个异常对象,
                  该对象被提交给Java运行时环境。即:抛出异常对象。
                 
                2.当Java运行时环境受到异常对象后,会依次判断该异常对象是否是catch块后异常类或其子类
                  的实例对象,如果是,Java运行时环境将调用该catch块来处理该异常;
                  否则,就再次判断该异常和下一个catch块里的异常类进行比较。
                3.如果匹配之后,
                        如果匹配之后,程序就会进入到负责异常处理的catch块,系统生成的异常对象ex将会传给catch块后的异常形参,
                        从而允许catch块通过该对象来获得异常的详细信息。
                       
                        注意:
                                try块后可以有多个catch块,try块后使用多个catch块是为了针对不同异常类提供
                                不同的异常处理方式。当系统发生不同意外情况时,系统
                                会生成不同的异常对象,Java运行时环境就会根据该异常对象所属的异常类来决定
                                来决定使用哪个catch块来处理该异常。
                               
                4.如果Java运行时环境找不到捕获该异常的catch块,则运行时环境终止,Java程序也将自动退出。
               



四、

                        注意在安排catch块时,要注意的要点:先处理小异常,再处理大异常。
                       
                       
                        实际上,在进行异常捕获时,不仅应该吧Exception对应的catch块放在最后,
                        所有父类异常的catch块都应该放在子类异常的catch块的后面,简称为:先处理小异常,再处理大异常,
                        否则将出现编译错误。
                       
                       
                        5.访问异常信息:
                       
                          如果我们要访问异常信息,可以通过调用该异常对象的相关方法来实现。
                          
                          所有的异常对象都包含如下几个常用方法:
                          
                          getMessage();  -----  返回该异常的详细描述字符串。
                          
                          printStackTrace() ----将该异常的跟踪栈信息输出到标准错误输出。
                          
                          printStackTrace(PrintStream s) ------将该异常的跟踪栈信息输出到指定输出流
                          
                          getStackTrace()  ------   返回该异常的跟踪栈信息
                          
                          
                          
                       
                       
               

3 个回复

倒序浏览
回复 使用道具 举报
说的啥。。??不懂不懂。。
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
不错不错..
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马