JAVA学习(异常)

一、异常

指运行时期发生的不正常情况

在JAVA中用类的方式对不正常的情况进行描述和封装对象。

描述不正常情况的类,就称为异常类。

将正常流程代码与问题处理代码分离,提高阅读性。

 

将问题的共性向上抽取,形成异常体系

最终问题(不正常情况)分为两大类:

Throwable:该体系的特点在于其所有的子类都具有可抛型

throws,throw,凡是被这两个关键字所操作的类和对象都具备可抛型。

1.一般不可处理的。Error

特点:是由于JVM抛出的严重性问题。

这种问题一般不针对处理,直接修改程序。

2.可以处理的。Exception

 

1.1自定义异常

某些异常在JAVA中并没有定义过,就需要按照JAVA异常的创建思想,面对对象,将该异常进行自定义描述,并封装成对象。

注意:如果让一个类称为异常类,必须要继承异常体系,因为只有称为异常体系的子类才有资格具备可抛型,才可以被throws,throw两个关键字所操作。

例如:角标为负数的异常情况

public class FuShuIndexException extends Exception{
    FuShuIndexException(){
    }
    FuShuIndexException(String msg){
        super(msg);   //交给Exception类完成抛出信息
    }
}


public  class Demo {
    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) throws FuShuIndexException{  //对异常进行声明
        int []arr = new int[3];
        Demo d = new Demo();
        int num = d.method(arr,-3);
        System.out.println(num);
    }
}

 

 

1.2 异常的分类:

(1)编译时被检测异常:只要是Exception和其子类都是,除了特殊子类RuntimeException体系

希望在编译时就进行检测,让这种问题有对应的处理方式

(2)编译时不检测异常(运行时异常):就是Exception中的RuntimeException和其子类

这种问题发生时,无法让功能继续,运算无法进行,更多的是因为调用的原因导致的。

throws和throw的区别:

1.throws使用在函数上,throw使用在函数内。

2.throws抛出的是异常类,可以抛出多个,用逗号隔开

throw抛出的是异常对象

 

1.3 异常捕捉

异常的使用必须要对其进行声明或者捕捉,除了使用throws进行声明外,还可以通过捕捉异常进行使用

具体格式是:

try{

//需要被检测异常的代码

}

catch(异常类 变量){   //该变量用于接收发生的异常对象     (可以使用多catch)

//处理异常的代码

}

finally{

//一定会被执行的代码

}

 

多catch将父类的catch放在最下面

多catch时将    catch(Exception e){  }   放在最后面

 

例如:角标为负数的异常情况

public class FuShuIndexException extends Exception{
    FuShuIndexException(){
    }
    FuShuIndexException(String msg){
        super(msg);   //交给Exception类完成抛出信息
    }
}


public  class Demo {
    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) throws FuShuIndexException{
        int []arr = new int[3];
        Demo d = new Demo();
        try{          //可以处理的情况使用捕捉异常
            int num = d.method(arr,-3);
            System.out.println(num);
        }
        catch (FuShuIndexException e){
            System.out.println("角标为负数");
        }
    }
}

异常捕捉后程序继续执行,执行对异常的处理:

 

 

1.4   finally代码块

finally为一定会执行的代码,产生异常或者没有异常都会执行。

 

1.5异常的注意事项

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

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

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

posted @ 2021-03-29 20:36  金芒果决斗  阅读(54)  评论(0)    收藏  举报