java中的异常

  特点:

  1,在运行时期发生的不正常情况

  2,是java通过面向对象的思想将问题封装成了对象,用异常类对其进行描述

  3,流程代码和问题处理代码的分离

  4,不同问题用不同类进行描述

  异常体系:

  1,Throwable(具有可抛性,throws和throw关键字所操纵的类)

    1,一般不可处理error

      是由jvm抛出的严重性的问题,这种问题发生一般不针对性处理,直接修改程序。

    2,可以处理Exception

  2,自定义异常,

     class FuShuIndexException extends Exception

      {

        FuShuIndexException()

      }

  

  窗口中所涉及的信息通过super(msg)有jvm代为处理

  3,异常的分类

    编译时被检测异常:只要是Exception和其子类都是,除了RtimeException运行时异常,这种问题一旦出现;希望在编译时就进行检测,让这种问题有对应的处理方式,这样的问题都可以针对性的处理。

    编译时不检测的异常(运行时异常):就是Exception中的RuntimeException和其子类。这种问题的发生,无法让功能继续,运算无法进行,更多是因为调用者的原因导致的而或者引发了内部状态的改变导致的。那么这种问题一般不处理,直接编译通过,在运行时,让调用者调用时的程序强制停止,让调用者对代码进行修正。

  throws 和throw的区别。

    1,throws使用在函数上。
       throw使用在函数内。
    2,throws抛出的是异常类,可以抛出多个,用逗号隔开。
       throw抛出的是异常对象。

  4,异常的捕捉

  try
  {
      //需要被检测异常的代码。
  }
  catch(异常类 变量)//该变量用于接收发生的异常对象
  {
      //处理异常的代码。
  }
  finally
  {
      //一定会被执行的代码。
  }

  

  由 int num = d.method(arr,-30);调用class Demo触发了FuShuIndexException

  然后回到try块捕捉到异常,在catch中进行处理。

   5,异常处理的原则:
    1,函数内容如果抛出需要检测的异常,那么函数上必须要声明。
        否则必须在函数内用trycatch捕捉,否则编译失败。
    2,如果调用到了声明异常的函数,要么trycatch要么throws,否则编译失败。
    3,什么时候catch,什么时候throws 呢?
        功能内容可以解决,用catch。
        解决不了,用throws告诉调用者,由调用者解决 。
    4,一个功能如果抛出了多个异常,那么调用时,必须有对应多个catch进行针对性的处    理。内部又几个需要检测的异常,就抛几个异常,抛出几个,就catch几个。如果有多个catch异常的处理操作要把catch的父类异常发在下面,因为catch是按照顺序进行匹配并调用的。

  6,三块的执行顺序和返回顺序

    http://blog.csdn.net/luyee2010/article/details/8671187

    1,finally是一定会执行的代码

    2,如果try中有异常而没有捕获,程序中断

    3,如果有return语句,第一种情况是在finally中,则只执行finally中的return,finally优先级都在其他块的return之前。如果fianlly中没有return,则会在执行完fianlly中的语句之后再执行其他块中的return语句。至于try块和catch块中的执行顺序,只要有return就会返回,函数出栈。至于先执行那个return具体看try中捕捉到的异常所在语句的顺序。

  7,异常的注意事项:

    1,子类在覆盖父类方法时,父类的方法如果抛出了异常,
    那么子类的方法只能抛出父类的异常或者该异常的子类。

    2,如果父类抛出多个异常,那么子类只能抛出父类异常的子集。

    简单说:子类覆盖父类只能抛出父类的异常或者子类或者子集。

    注意:如果父类的方法没有抛出异常,那么子类覆盖时绝对不能抛,就只能try .

原文地址:https://www.cnblogs.com/jinb/p/6204576.html