Day28 异常

38 篇文章 0 订阅

Day28 异常

一、概念

异常是程序在运行期发生的不正常的事件,它会打断指令的正常执行流程。

设计良好的程序应该在异常发生时提供处理这些不正常事件的方法,使程序不会因为异常的发生而阻断或产生不可预见的结果。

注意:Java语言使用异常处理机制为程序提供了异常处理的能力

二、异常的分类

Java程序运行过程中所发生的异常事件从严重性可分为两类:

1、 错误(Error):JVM系统内部错误或资源耗尽等严重情况-属于JVM需要负担的责任,这一类异常事件无法恢复或不可能捕获,将导致应用程序中断。

2、 异常(Exception):其它因编程错误或偶然的外在因素导致的一般性问题。这类异常得到恰当的处理时,程序有机会恢复至正常运行状况。

3、异常(Exception)又分为两类

​ RuntimeException – 非受检性异常
​ 一般性异常 --------- 受检性异常

4、Exception分类:

(数组越界,空指针,类型转换错误)

1、非受检(unchecked)异常(运行时异常 RuntimeException):编译器不要求强制处置的异常。一般是指编程时的逻辑错误。是程序员应该积极避免其出现的异常java.lang.RuntimeException及它的子类都是非受检异常:

错误的类型转换:java.lang.ClassCastException

数组下标越界:java.lang.ArrayIndexOutOfBoundsException

空指针访问:java.lang.NullPointerException

算术异常(除0溢出):java.lang.ArithmeticException

2、受检(checked)异常 — 一般性异常:编译器要求必须处置的异常。指的是程序在运行时由于外界因素造成的一般性异常。

没有找到指定名称的类:java.lang.ClassNotFoundException

访问不存在的文件:java.io.FileNotFoundException

操作文件时发生的异常:java.io.IOException

操作数据库时发生的异常:java.sql.SQLException

5、运行时异常(RunntimeException)非受检性异常:那些程序员在编写程序的时z免的异常(逻辑异常),数组越界异常,类型转换异常,空指针异常

非运行时异常:程序员避免不了,由外界因素导致的
异常分类图

在这里插入图片描述

三、 异常处理机制

1、概念:

  1. 抛出异常:当程序中发生异常时,可以使用 throw 关键字手动抛出异常,也可以由系统自动抛出异常。
  2. 捕获异常:使用 try-catch 块来捕获可能发生的异常,以便对异常进行处理。在 try 块中编写可能抛出异常的代码,然后在 catch 块中捕获并处理异常。
try {
    // 可能抛出异常的代码
} catch (ExceptionType1 e1) {
    // 处理异常的代码
} catch (ExceptionType2 e2) {
    // 处理异常的代码
} finally {
    // 无论是否发生异常,都会执行的代码
}

​ 3.处理异常:在 catch 块中对捕获到的异常进行处理,可以输出异常信息、记录日志、进行补救处理,或者抛出新的异常。

​ 5.finally 块finally 块中的代码无论是否发生异常都会被执行,通常用于释放资源、关闭连接等清理工作。

​ 6.异常链:在 Java 7 及之后的版本中,引入了异常链机制,可以在捕获到异常后将原始异常作为新异常的 cause 进行抛出,以便更好地追踪异常的来源。

理解:1.Java程序在执行过程中如果出现异常,会自动生成一个异常类对象, 该异常对象将被自动提交给JVM,这个过程称为抛出(throw)异常。
2.当JVM接收到异常对象时,会寻找能处理这一异常的代码
2.1 找到了 - 把当前异常对象交给其处理,这一过程称为捕获(catch)异常和处理异常。
2.2 没找到 - 运行时系统将终止,相应的Java程序也将退出。

2、Java处理异常的能力:
2.1.try…catch…
2.2.throws
2.3.throw

3、try…catch…语法结构:

 			try{
  				...可能出现异常的代码...
  
  			}catch(异常类型 e){//捕获异常
  				...处理异常...
  
  			}finally{
  				...不管是否发生异常,都会执行的代码块...
  			}

注意
1.finally代码块根据需求可写可不写
2.经验告诉我们关闭资源的代码一般写在finally

​ 3.try…catch…可以有多个catch

​ 4.先捕获的异常范围不能大于后捕获的异常范围

4、throws
语法结构:

	public void method() throws 异常1,异常2{}

理解

throws是抛出异常,抛给方法的调用方

5、throw
语法结构:

throw new 异常();

理解

手动抛出异常,throw 结合自定义异常使用

四、 自定义异常类

1、概念: 在 Java 中,可以通过继承 Exception 或其子类来创建自定义异常类。自定义异常类通常用于表示特定的业务逻辑异常或错误,以便在程序中进行捕获和处理。

2、创建自定义异常,需要继承Exception 或其子类。

public class MyException extends Exception {  

   @Override

 public String toString() {

   // TODO Auto-generated method stub

   return "我们自己的异常类";

  }

}

3、使用自定义异常

​ 解决业务需求上的问题 。

4、举例:

public class CustomExceptionExample {
    public void doSomething() throws CustomException {
        // 业务逻辑
        if (/* 出现异常的条件 */) {
            throw new CustomException("发生自定义异常");
        }
    }

    public static void main(String[] args) {
        CustomExceptionExample example = new CustomExceptionExample();
        try {
            example.doSomething();
        } catch (CustomException e) {
            // 捕获并处理自定义异常
            e.printStackTrace();
        }
    }
}
public class CustomException extends Exception {
    public CustomException() {
        super();
    }

    public CustomException(String message) {
        super(message);
    }

    public CustomException(String message, Throwable cause) {
        super(message, cause);
    }

    public CustomException(Throwable cause) {
        super(cause);
    }
}
  • 32
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值