首页 > 其他分享 >Day28 异常

Day28 异常

时间:2024-04-01 21:58:19浏览次数:24  
标签:CustomException java Day28 异常 catch cause public

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);
    }
}

}

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

public CustomException(Throwable cause) {
    super(cause);
}

}


标签:CustomException,java,Day28,异常,catch,cause,public
From: https://blog.csdn.net/yjp1240201821/article/details/137247989

相关文章

  • 【异常】Spring的依赖注入(DI)系统提示异常,因为漏了一个实现类导致了错误Parameter 0 of
    一、异常内容2024-04-0111:44:39.912[main]ERRORorg.springframework.boot.diagnostics.LoggingFailureAnalysisReporter-***************************APPLICATIONFAILEDTOSTART***************************Description:Parameter0ofconstructorinc......
  • RTOS--异常向量和中断向量
    目录1异常向量2中断向量3示例说明RTOS(实时操作系统)中的异常和中断向量是操作系统处理异常事件和中断请求的关键机制。这些向量是预定义的内存地址,当特定事件发生时,处理器会跳转到这些地址执行相应的处理程序。下面将详细介绍RTOS中的异常和中断向量,并通过示例来说明它......
  • 记录一次使用unordered_set插入数据异常的问题
    问题描述问题和unordered_set有关,相关代码如下://打印unordered_set的所有值voidprintSet(conststd::unordered_set<std::string>&data){intindex=0;autoit=data.begin();for(;it!=data.end();++it){conststd::string&key=*i......
  • 【JAVA】try-catch结构:异常处理的使用
    try-catch 是Java和许多其他编程语言中用于异常处理的关键字组合,它允许程序员优雅地捕获和处理运行时可能出现的错误。以下是 try-catch 结构的详细说明:结构:try{//有可能抛出异常的代码块//这里可以调用方法、执行操作等riskyOperation();}catch(S......
  • Java:异常处理
    在Java中,异常是程序运行时发生的不正常情况,它们打断了正常的指令流。异常处理是Java语言的一个重要特性,它可以帮助程序员捕获并处理运行时可能出现的错误,从而提高程序的健壮性。以下是Java中异常相关的详细知识:异常类的层次结构Java的异常类都继承自java.lang.Throwable类......
  • springboot异常处理和JSR303校验
    springboot异常处理一、异常问题分析问题:并没有输出我们抛出异常时指定的异常信息。所以,现在我们的需求是当正常操作时按接口要求返回数据,当非正常流程时要获取异常信息进行记录,并提示给用户。异常处理除了输出在日志中,还需要提示给用户,前端和后端需要作一些约定:1、错误提示......
  • 中断和异常,系统调用
    中断和异常中断的错误CPU上会运行两种程序,一种是操作系统内核程序,一种是应用程序在合适的情况下,操作系统内核会把CPU的使用权主动让给应用程序(第二章进程管理相关内容)“中断”是让操作系统内核夺回CPU使用权的唯一途径“中断”会使CPU由用户态变为内核态,使操作系统重新夺回......
  • 蓝旭预习博客2:Java异常类、常用类、容器与泛型
    Java异常类1.什么是异常异常是导致程序中断运行的一种指令流,如果不对异常进行正确处理,则可能导致程序的中断执行,造成不必要的损失。例如下标越界异常(IndexOutOfBoundsException)空指针异常(NullPointerException) 算术异常( ArithmeticException)数字格式化异常(NumberFormatE......
  • java 异常类+常用类+容器、泛型
    目录一、.异常类:1.捕获和处理异常:2.抛出: 3.自定义异常类:二、包装类、String、BigDecimal1.包装类:2.String:3.BigDecimal:三、泛型、列表、set、map:1.泛型:2.列表:3.set:4.map:一、.异常类:异常是程序运行过程中可能出现的错误情况或有别于一般情况的情况。而java......
  • Blazor学习记录_8.CSS隔离和代码隔离_异常处理_流式渲染
    19.CSS隔离和代码隔离19.1代码隔离使用C#partial关键字,创建一个与razor文件同名,扩展名加.CS的C#类文件,然后把razor文件中的@code中的代码迁移至cs文件中。注意命名空间、泛形参数声明、依赖注入的迁移19.2CSS隔离如同前面代码隔离文件一样,我们创建一个组件样式文......