当前位置: 首页 > article >正文

【Java 基础】13 异常

1.异常是什么

异常是指在程序运行过程中可能发生的、与正常执行流程不符的事件。这些事件可能包括错误不合理的输入资源不足等。在 Java 中,异常是通过 throw 语句抛出的,可以是 Java 内置的异常类,也可以是自定义的异常类。

2. 异常类的层次结构

在 Java 中,异常类被组织成一个层次结构。

所有的异常类都是 Throwable 类的子类,主要分为两大类:ErrorException

1)Error

表示严重的错误,程序通常无法处理。例如,OutOfMemoryError表示内存不足。

2)Exception

表示程序可以处理的异常。又分为两种, RuntimeException(运行时异常)和其他非运行时异常。

  • RuntimeException: 表示程序运行时可能会出现的异常,这些异常通常由程序员在编写代码时可以避免的,例如,NullPointerExceptionArrayIndexOutOfBoundsException等。
  • 非运行时异常: 表示程序运行时难以避免的异常,通常是由外部条件造成的。例如,IOException表示输入输出操作可能发生错误。
    在这里插入图片描述

常见错误:

  • OutOfMemoryError 内存溢出
  • StackOverflowError 堆栈溢出异常
  • FileNotFoundException 找不到指定的文件或目录
  • RuntimeExceptions 运行时间异常
  • NullPointerException 空指针异常
  • ArithmeticException 数学运算异常
  • ArrayIndexOutOfBoundsException 数组下标越界异常
  • ClassCastException 类型转换异常
  • NumberFormatException 数字格式不正确异常

3. try-catch 块的使用

在 Java 中 try-catch块是用于捕获和处理异常的机制。在 try 块中放置可能抛出异常的代码,而在 catch 块中处理异常,使用 finally 来存放无论发不发生异常都要执行的代码。

try {
    // 可能抛出异常的代码
    // ...
} catch (ExceptionType1 e1) {
    // 处理 ExceptionType1 异常的代码
} catch (ExceptionType2 e2) {
    // 处理 ExceptionType2 异常的代码
} finally {
    // 无论是否发生异常,都会执行的代码块
}
  • try块: 包含可能抛出异常的代码。
  • catch块: 处理特定类型的异常。可以有多个catch块,每个块处理不同类型的异常。
  • finally块: 无论是否发生异常,都会执行的代码块。通常用于释放资源或清理工作。

4. 抛出异常

除了在运行时可能出现异常的情况下由系统抛出外,程序员也可以使用 throw 语句主动抛出异常。

public class CustomExceptionExample {
    public static void main(String[] args) {
        try {
            // 主动去抛出一个,自己定义的错误
            throw new CustomException("This is a custom exception.");
        } catch (CustomException e) {
            // 如果发生 CustomException 这种错误,然后输出下面的信息
            System.out.println("Caught custom exception: " + e.getMessage());
        }
    }
}

// 自己定义一种错误类型,继承自 Exception
class CustomException extends Exception {
    // 一个有参构造函数,传入一个 messag (错误信息)作为参数
    public CustomException(String message) {
        super(message);
    }
}

在上述例子中,CustomException 是自定义的异常类,通过 throw 语句抛出,并在 catch 块中捕获。

5. 使用throws关键字声明异常

在方法签名中使用 throws 关键字声明方法可能抛出的异常。这告诉调用者该方法可能引发的异常类型,使得调用者能够适当地处理异常。

public class ThrowsExample {
    public static void main(String[] args) {
        try {
        	// 因为此方法 使用了 throws 抛出 CustomException错误
        	// 所以这里 使用了 try catch 去处理
            methodWithException();
        } catch (CustomException e) {
            System.out.println("Caught custom exception: " + e.getMessage());
        }
    }

	// 因为这个方法内 有可能 会出现 CustomException 这个错误
	// 而 本方法 还不想去 处理这种错误,所以就继续向上抛,向上抛错使用的就是 throws 关键字
    public static void methodWithException() throws CustomException {
        // 可能抛出异常的代码
        throw new CustomException("This is a custom exception.");
    }
}

// 自己定义一种错误类型,继承自 Exception
class CustomException extends Exception {
    public CustomException(String message) {
        super(message);
    }
}

总结:

异常是我们实际开发过程中遇见最多的一个既熟悉又陌生的东西了,所以我们要掌握好异常是如何抛出及处理的,发生错误的时候,我们要仔细阅读给出的错误信息,因为这就是解决问题的关键。


http://www.kler.cn/a/153364.html

相关文章:

  • Handler系列-prepareMainLooper在哪里调用的
  • spring boot mybatis TypeHandler 看源码如何初始化及调用
  • vue请求如何按顺序执行
  • externalTrafficPolicy 再探
  • P8A002-CIA安全模型-配置Linux描述网络安全CIA模型之可用性案例
  • Postman如何导入和导出接口文件
  • 【开源视频联动物联网平台】j2mod 库写一个Modbus TCP 服务器
  • linux关于文件大小的换算
  • Quirks(怪癖)模式是什么?它和 Standards(标准)模式有什么区别?
  • 高端网站设计公司 -蓝蓝设计数据可视化大屏服务
  • Day03 嵌入式---中断
  • 【学习记录】从0开始的Linux学习之旅——应用开发(helloworld)
  • 目标检测YOLO系列从入门到精通技术详解100篇-【自动驾驶】激光雷达
  • 自动驾驶学习笔记(十二)——定位技术
  • 基于Springboot的在线问卷调查系统(有报告)。Javaee项目,springboot项目。
  • TCP三次握手过程
  • 目标检测——Fast R-CNN算法解读
  • R语言阶段复习一
  • Elasticsearch:LangChain 是什么?
  • Java 配置文件的使用(附代码信息讲解)