异常

作者: 咸鱼有梦想呀 | 来源:发表于2017-11-06 21:24 被阅读0次

    1.异常
    异常:在运行时发生的错误
    异常类:描述不正常的情况的类
    在Java中将异常按照面向对象的思想将问题封装成了对象,用异常类对其进行描述。以对象抛出的形式体现。

    2.体系
    由于问题很多,也就说描述的类也很多。
    将其共性进行向上抽取,形成了异常体系。

    Throwable(可抛出)

    • 一般不可处理的(Error)
      特点:是由jvm(虚拟机)抛出的严重性的问题
      不处理,直接修改程序
    • 可以处理的(Exception)

    无论是error还是exception,问题发生就应该可以抛出,而这个体系的特点就在于throwable及其所有的子类都具有可抛性。

    异常声明抛出
    可抛性的体现:通过throws和throw两个关键字体现。
    凡是可以被这两个关键字所操作的类和对象都具有可抛性。

    函数内出现异常,需要在函数外申明;调用了发生异常的函数或者申明异常的函数,处理方式就是抛出

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

    3.异常的分类

    • 编译时被检测异常:只要是Exception和其子类都是,除了特殊子类RuntimeException体系
    • 编译时不检测异常(运行时异常):就是Exception中的RuntimeException和其子类。

    自定义异常时,要么继承Exception,要么继承RuntimeException。

    4.异常捕捉trycatch
    这是可以对异常进行针对性处理的方式

    具体格式:

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

    举个栗子
    数组角标越界

    class FuShuIndexException extends Exception
    {
        FuShuIndexException()
        {}
        FuShuIndexException(String msg)
        {
            super(msg);
        }
    }
    
    class Demo9
    {
        public int method(int[] arr,int index)throws FuShuIndexException
        {
            if(index<0)
                throw new FuShuIndexException("角标变成负数了");
                return arr[index];
        }
    }
    public class ExceptionDemo {
    
        public static void main(String[] args) {
            int[] arr = new int[3];
            Demo9 d = new Demo9();
            try
            {
                int num = d.method(arr, -30);
                System.out.println("num="+num);
            }
            catch (FuShuIndexException e)
            {
                System.out.println("负数角标异常");
            }
            System.out.println("over");
        }
    
    }
    
    运行结果

    多catch情况
    一个try对象多个catch,有几个异常捕获几个。

    多catch父类的catch放在最下面
    

    finally代码块
    一定会执行的代码。
    但是,当退出jvm时不执行(System.exit(0);)

    • finally的作用
      通常用于关闭(释放)资源。

    • try catch finally 代码块组合特点:

      • try catch(多个)
        当没有必要资源需要释放时,可以不用定义finally。
      • try finally
        异常无法之间catch处理,但是资源需要关闭

    5.异常处理原则

    • 函数内容如果抛出需要检测的异常,那么函数上必须要申明。否则必须在函数内用try catch捕捉。
    • 如果调用到了声明异常的函数,要么try catch要么throws。
    • 功能内容可以解决,用catch
      解决不了,用throws声明抛出
    • 一个功能如果抛出了多个异常,那么调用时,必须有对应多个catch进行针对性的处理。内部有几个需要检测的异常,就抛几个异常,抛出几个就catch几个。

    6.异常的注意事项

    • 子类在覆盖父类的方法时,父类的方法如果抛出了异常,那么子类的方法只能抛出父类的异常或者该异常的子类。
    • 如果父类抛出多个异常,那么子类只能抛出父类异常的子集。
    • 如果父类的方法没有抛出异常,那么子类覆盖时绝对不能抛。只能try不能抛。

    相关文章

      网友评论

          本文标题:异常

          本文链接:https://www.haomeiwen.com/subject/tpbgpxtx.html