Java异常处理学习笔记(Exception和Error)

什么是异常?
    就像我们人一样,每个人都希望自己健健康康的,但生活并不会按照我们所想的来,总会出现状况,发热,咳嗽等。程序也一样,程序在运行过程中也会发生各种非正常状况。
    除零异常实例:

public class Demo {
    
    
    public static void main(String[] args) {
    
    
        //传入两个参数
        int result = DivideByZero(4, 0);
        System.out.println(result);
    }
    //定义一个两个数相除的方法
    public static int DivideByZero(int a, int b){
    
    
        return a/b;
    }
}

运行结果会报除零异常:在这里插入图片描述
    在上面实例中运行结果出现了java.lang.ArithmeticException异常,这个异常只是Java异常类中的一种,下图摘自互联网:
在这里插入图片描述
    从上图可以看出来,Throwable有两个直接子类Error和Exception类。Error表示程序出现的错误,Exception表示程序中产生的异常。

  • Error类称为错误类:表示Java在运行时产生的系统内部错误或资源耗尽的错误,这是比较严重的,仅靠修改程序是无法修复的。
  • Exception类称为异常类:表示程勋本身可以处理的错误。Exception类中有一个RuntimeException类,该类及其子类表示运行时异常,除此之外Exception类下的其他类都表示编译时异常。

异常处理try…catch…finally
    try…cathc是Java提供的专门用于处理异常的方式。语法如下:

try{
    
    
   //代码逻辑
 }catch(ExceptionType e){
    
    
   //对ExceptionType的异常处理
}

我们将上面的实例改造一下:

public class Demo {
    
    
    public static void main(String[] args){
    
    
        try {
    
    
            //传入两个参数
            int result = DivideByZero(4, 0);
            System.out.println(result);
        }catch (Exception e){
    
    
            System.out.println("程序发生了异常...");
        }
        System.out.println("程序继续向下执行...");
    }
    //定义一个两个数相除的方法
    public static int DivideByZero(int a, int b){
    
    
        return a/b;
    }
}

运行结果:在这里插入图片描述
    值得注意的是在try代码块中,发生异常的语句后面的代码不会执行。有时候我们写程序,就是希望有些代码无论是否发生必须要执行的,我们可以在try…catch语句后加一个finally代码块。
格式:

try{
    
    
     //try块中放可能发生异常的代码。     
     //如果执行完try且不发生异常,则接着去执行finally块和finally后面的代码(如果有的话)。     
     //如果发生异常,则尝试去匹配catch块。

}catch(SQLException SQLexception){
    
    
    //每一个catch块用于捕获并处理一个特定的异常,或者这异常类型的子类。Java7中可以将多个异常声明在一个catch中。
    //catch后面的括号定义了异常类型和异常参数。如果异常与之匹配且是最先匹配到的,则虚拟机将使用这个catch块来处理异常。
    //在catch块中可以使用这个块的异常参数来获取异常的相关信息。异常参数是这个catch块中的局部变量,其它块不能访问。
    //如果当前try块中发生的异常在后续的所有catch中都没捕获到,则先去执行finally,然后到这个函数的外部caller中去匹配异常处理器。    
    //如果try中没有发生异常,则所有的catch块将被忽略。
}catch(Exception exception){
    
    
    //...
}finally{
    
    
   //finally块通常是可选的。   
   //无论异常是否发生,异常是否匹配被处理,finally都会执行。
   //一个try至少要有一个catch块,否则, 至少要有1个finally块。但是finally不是用来处理异常的,finally不会捕获异常。
  //finally主要做一些清理工作,如流的关闭,数据库连接的关闭等。 
}

实例:

public class Demo {
    
    
    public static void main(String[] args){
    
    
        int result = 0;
        try {
    
    
            //传入两个参数
            result = DivideByZero(4, 0);
            System.out.println(result);
        }catch (Exception e){
    
     //对异常进行处理
            System.out.println("程序发生了异常...");
        }finally {
    
     //finally代码块
            System.out.println("finally代码块执行了...");
            System.out.println("输出结果:" + result);
        }
        System.out.println("程序继续向下执行...");
    }
    //定义一个两个数相除的方法
    public static int DivideByZero(int a, int b){
    
    
        return a/b;
    }
}

运行结果:在这里插入图片描述
throws关键字:
    throws关键字使用来声明一个方法有可能会出现异常,让调用者必须在程序中处理这个异常。语法格式如下:

//修饰符 返回值 方法名(参数1,参数2) throws ExceptionType1,ExceptionType2{}
//可以抛出多个异常。
public class Demo {
    
    
    public static void main(String[] args){
    
    
        DivideByZero(2,0);//调用者不处理该异常就会编译报错
    }
    //定义一个两个数相除的方法,该方法抛出一个异常
    public static int DivideByZero(int a, int b) throws Exception{
    
    
        return a/b;
    }
}

自定义异常:
    有时候程序开发中有可能要描述程序中特有的情况,这就需要我们程序员自定义异常了,但自定义异常必须是继承自Exception或子类。实际开发中异常处理类会有状态码,异常信息等。
语法格式:

  //throw Exception 异常对象
  //thorw关键字用于在方法中声明抛出异常的实例对象

实例:

//自定义异常处理类
public class DivideByZeroMin extends Exception {
    
    
    public DivideByZeroMin(){
    
    
        super();//调用Exception的无参构造方法
    }
    public DivideByZeroMin(String msg){
    
    
        super(msg);调用Exception的有参构造方法
    }
}
//测试类
public class Demo {
    
    
    public static void main(String[] args){
    
    
        try {
    
    
            int i = DivideByZero(4, -2);
        } catch (DivideByZeroMin e) {
    
    
            e.printStackTrace();
        }
    }
    //定义一个两个数相除的方法,该方法抛出一个自定义异常
    public static int DivideByZero(int a, int b) throws DivideByZeroMin{
    
    
        if ( b < 0){
    
    
            //使用throw关键字声明异常对象
            throw new DivideByZeroMin("被除数不能是负数");
        }
        return a/b;
    }
}

运行结果:
在这里插入图片描述
加油吧!!!

猜你喜欢

转载自blog.csdn.net/qq_42494654/article/details/109342976