java课程学习第六课:异常处理

一、简述Java Error类与Exception类的区别。

异常对象都是派生于 Throwable 类的一个实例,所有的异常都是由 Throwable 继承而来,但是在下一层分解为两个分支: Error 和 Exception。

  • Error 类层次结构描述了 Java 运行时系统的内部错误和资源耗尽错误。Error 的出现,意味着程序出现了严重的问题,而这些问题不应该再交给 Java 的异常处理机制来处理,程序应该直接崩溃掉,比如说 OutOfMemoryError,内存溢出了,这就意味着程序在运行时申请的内存大于系统能够提供的内存,导致出现的错误,这种错误的出现,对于程序来说是致命的。
  • Exception 分解为两个分支: RuntimeException 和其他异常;由于编程导致的异常属于 RuntimeException,如果程序本身没有问题,但由于像 I/O 错误这类问题导致的异常属于其他异常。
    放图:
    在这里插入图片描述

二、异常的抛出

throw 和 throws 的区别

throw

throw 关键字,用于主动地抛出异常;使用方法为 throw 关键字后面跟上 new 关键字,以及异常的类型,还有参数即可。

throw new exception_class("error message")

样例如下:

public class DemoThrow {
   

    public static void checkGrade(int grade){
   
        if(grade<60){
   
            throw  new ArithmeticException("挂科警告!!!");
        }
    }
    public static void main(String[] args) {
   
        checkGrade(59);
    }
}

这段代码在运行时会报如下的错误:

Exception in thread "main" java.lang.ArithmeticException: 挂科警告!!!
	at yuanMaFenxi.DemoThrow.checkGrade(DemoThrow.java:7)
	at yuanMaFenxi.DemoThrow.main(DemoThrow.java:11)

throws

throws 关键字用于 声明异常,对于检查型异常,如果你没有做处理,那么编译器就会提示你 要么在方法上声明,要么将其放在 try-catch中。

throws 和 try-catch 使用的选择

假设现在有这么一个方法,method01 可能会出现多种异常。这种情况可以用 try-catch 来处理。

public void method01(){
   
        try{
   
            // code that might throw exceptions 
        }catch (FileNotFoundException e){
   
            // emergency action for missing files 
        }catch (UnknownHostException e){
   
            //emergency action for unknown files 
        }
    }

但是如果出现好几个类似于 method01 的方法,如果为每一个方法都加上 try-catch 就会显得非常繁琐,降低了代码的可读性。
那么就可以 使用 throws 关键字,在方法签名上声明可能会抛出的异常,然后在调用该方法的地方使用 try-catch 处理。

public static  void method01() throws FileNotFoundException ,UnknownHostException{
   
     
    }

    public static void main(String[] args) {
   
        try{
   
            method01();
            // code that might throw exceptions
        }catch (FileNotFoundException e){
   
            // emergency action for missing files
        }catch (UnknownHostException e){
   
            //emergency action for unknown files
        }
    }

二者的区别:

  1. throws 关键字用于声明异常,它的作用和 try-catch 相似;throw 关键字用于显式的抛出异常。
  2. throws 关键字用于方法签名上,但是 throw 关键字用于方法体里面
  3. throws 关键字在声明异常的时候可以跟多个,但是 throw 一次只能抛出一个异常。

三、异常的捕获

如果发生了某个异常,但是没有在任何地方捕获这个异常,程序就会终止。

1. 捕获异常

要想捕获异常,需要设置 try/catch语句块,简单的 try/catch语句块如下所示:

try{
   
    code;
}catch(ExceptionType e){
   
 //   对异常的具体处理
}

如果 try 语句块中的任何代码抛出了 catch 字句中指定的一个异常类,那么

  1. 程序将会跳过 try 语句块的剩余代码
  2. 然后将执行 catch 字句中的处理器代码

如果 try 语句块中的代码块没有抛出任何异常,那么程序将跳过 catch 字句。

如果发放中的任何代码抛出了 catch 子句中没有声明的一个异常类型,那么这个方法就会立即退出。

2. 捕获多个异常

在每一个 try 语句块中可以捕获多个异常类型,并对不同类型的异常做出不同的处理,要对每个异常类型使用一个单独的 catch 字句。

try{
   
    code that might throw exceptions
}catch(FileNotFoundException e){
   
//    emergency action for missing files
}catch(UnknownHostWException e){
   
     //emergency action for unknown hosts
}catch(IOException e){
   
// emergency action for all other I/O problems
}    

3. 再次抛出异常与异常链

可以在 catch 子句中抛出一个异常,通常,希望改变异常的类型时会这样做

可以把原始异常设置为新异常的”原因“。

try{
   
    access the database
}catch(SQLException original){
   
    var e=new XXXXException("database error");
    e.initCause(original)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值