java的异常处理机制

          
   
         一.什么是异常;   
         二.什么是异常处理;
         三.异常在JVM的具体表现;
         四.try-catch-finally结构,throws语句,throw语句以及throws与throw区别;
         五.java中的异常类。


       首先,认识一下异常,很简单,就是在某些情况下,当前程序或代码无法继续进行的问题。 而异常处理就是针对可能出现或已经出现的异常进行处理,使程序正常运行。Ok,最简单的处理就是if-else,提前判断就行。所以这也是在异常处理机制引入之前的异常处理方法。


       其后,我们先了解一下方法的调用堆栈。java虚拟机用方法调用堆栈来跟踪每个线程中一系 列的方法调用过程。每个线程都有一个独立的方法调用堆栈,堆栈底部是程序的入口方法main(),放一个新的方法被调用时,java虚拟机就会把描述该方法的堆栈结构置入栈顶,位于栈顶的方法是正在执行的方法。该方法执行完毕后,会将处理器控制权交还给调用它的方法,以此类推。这样来看。我们就不难看出异常在JVM的具体表现了:当一个方法中的一个语句抛出异常时,如果该方法没有给出处理该异常的语句,那么该方法就会终止执行,并将这个异常传递给推栈中的下一个方法,直到某个方法中含有该异常处理的语句为止。如果该异常被传递至main()方法,仍然没有被处理,则异常将会被抛至JVM,程序中断。


       理解上述后,想必大家对异常处理本质有一定了解,那么我们就具体看看java中关于异常处理给出的机制:
    1.try-catch-finally语句
       try{
           可能抛出的异常的语句         
         } catch(Exception1 e){
             异常处理代码
          } catch(Exception2 e){
                异常处理代码
          }
            .......
             finally{
               必须执行的代码
            }
       (1):如果try块中没有抛出任何异常,当try块中的代码执行结束后,finally中的代     码将会被执行。
       (2):如果try块中抛出了一个异常且该异常被catch正常捕获,那么try块中至抛出异常代码之后的所有代码将会被跳过,程序接着执行与抛出异常类型匹配的catch子句中的代码,最后执行finally子句中的代码。
       (3):如果try块中抛出了一个不能被任何catch子句捕获(匹配)的异常,try块中剩下的代码将会被跳过,程序接着执行finally子句中的代码,未被捕获的异常对象继续抛出,沿调用推栈顺序传递。


     2.throws语句,通过调用产生异常的方法来处理这些异常。
        <返回类型> 方法名 (参数)throws <异常类型列表>
        {
            方法体;
          }
        
      3.throw语句
       在java中,所有方法都是通过throw语句来抛出一个异常事件,抛出异常首先需要通过throw语句生成一个异常类的对象。
         throw new 异常类名;
         如果大家对throws 与throw 有些迷茫。ok,看看一下四点区别;
         1>.throws 代表一种状态,代表方法可能有异常抛出。
         2>.throws用在方法声明中,而throw用在方法中。
         3>.throws可以抛出多个异常,而throw只能用于抛出一种异常。
         4>.throw代表动作,表示抛出一个异常的动作。


        最后,我们简单了解一下java中的异常类,java.lang.Throwable类为父类,有Error子类和Exception子类,Exception类有RuntimeException子类和其他子类。RuntimeException类定义为运行时异常类,Exception类的其他子类定义为受检查异常类。运行时异常类是指因设计或实现方式不当导致的问题,也可以说是程序员的原因导致的问题,本来是可以避免发生的情况。包括算法错误,空指针异常,数组下标越界,非法强制转换类型等。


       这里谢谢大家对本文的阅览。本文参考清华大学出版社《高级程序设计语言》,只是学习提高,无任何商业目的。
  
         
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值