Java里面的异常

Java里面的异常

  • 父类: Exception

  • 异常分为两类:

  • 编译时异常:没有继承RuntimeException的异常,直接继承于Exception,编译阶段就会错误提示(用来提示程序员)

  • 运行时异常:RuntimeException本身和子类,编译阶段没有错误提示,运行时出现的

  • 可以写多个catch,如果存在父子关系,父要写在最后面

在Java中,异常(Exception)是一种用于处理程序运行期间出现的错误或异常情况的机制。当程序发生无法预料的情况,如文件未找到、网络中断等,Java会抛出一个异常。

异常的作用

  1. 程序健壮性:通过异常处理,程序可以更加健壮,不会因为小的错误而导致整个程序崩溃。
  2. 错误处理:异常提供了一种结构化的方式来处理错误,而不是简单地使用条件语句或返回值来表示错误。
  3. 代码可读性:通过捕获和处理异常,可以将错误处理代码与正常业务逻辑代码分离,提高代码的可读性和可维护性。

如何使用异常

  1. 声明异常 :在方法签名中使用throws关键字声明该方法可能会抛出的异常。
java 复制代码
public void readFile(String filename) throws IOException {
    // ... 读取文件的代码 ...
}
  1. 抛出异常 :在程序中使用throw关键字抛出异常。
java 复制代码
if (file == null) {
    throw new NullPointerException("File is null");
}
  1. 捕获异常 :使用try-catch块来捕获并处理异常。
java 复制代码
try {
    // 可能会抛出异常的代码
    readFile("example.txt");
} catch (IOException e) {
    // 处理异常的代码
    e.printStackTrace();
}
  1. finally块 :无论是否发生异常,finally块中的代码都会被执行。通常用于释放资源,如关闭文件或网络连接。
java 复制代码
try {
    // ...
} catch (Exception e) {
    // ...
} finally {
    // 无论是否发生异常,这里的代码都会被执行
}
  1. 自定义异常 :可以通过继承Exception或RuntimeException类来创建自定义异常。
java 复制代码
public class MyCustomException extends Exception {
    public MyCustomException(String message) {
        super(message);
    }
}

注意事项

  1. 避免空的catch块:空的catch块会捕获异常但不进行任何处理,这可能导致程序在运行时出现错误而不被察觉。
  2. 不要过度使用异常:异常处理应该用于处理异常情况,而不是用于控制程序流程。过度使用异常可能会导致代码难以理解和维护。
  3. 选择正确的异常类型 :根据异常的性质和发生的原因选择合适的异常类型。不要随意使用Exception或RuntimeException作为通用异常类型。
  4. 记录异常信息:在捕获异常时,最好记录异常的详细信息(如堆栈跟踪),以便后续分析和调试。
  5. 避免在finally块中抛出异常:如果在finally块中抛出异常,它会覆盖try或catch块中抛出的异常,这可能导致程序无法正确处理原始异常。如果需要在finally块中执行可能抛出异常的操作,请确保在finally块中捕获并处理这些异常。

例子

java 复制代码
package com.mohuanan.unusual;

public class Test01 {
    public static void main(String[] args) {
        double[] arr = new double[5];
        //好处是,不会停止jvm的运行
        try{
            //可能会出现异常的代码
            System.out.println(arr[10]);
            //如果出现了异常,java会new 一个异常的对象
            //拿着这个对象和catch里面的参数比较
            //如果时一样的 就表示该异常被成功捕获
        }catch(ArrayIndexOutOfBoundsException e){
            System.out.println("数组索引越界了");
        }
        
    }
}
相关推荐
我是人✓几秒前
Java文件上传三方式对比:从传统到SpringBoot
java·开发语言
智能直播4 分钟前
网络RTMP拉流不卡顿、声音不同步,一文讲透缓冲区、时间戳
开发语言·ffmpeg·php·音视频·视频编解码
欣栀♡9 分钟前
JVM 频繁 Full GC 先看日志括号里的 cause,jstat 的 FGC 在 JDK 8 上会骗人
java·jvm
IT研究室30 分钟前
最新计算机毕业设计选题推荐-基于spring boot的葡萄酒文化宣传网站-网站-文档指导-Java-springboot
java·spring boot·课程设计
慧都小项32 分钟前
MyEclipse 中创建和测试 JAX-RS REST 接口:从项目配置到 REST Explorer
java·restful·myeclipse·jax-rs
Wang's Blog33 分钟前
Java 项目实战: 交友项目 - 入门案例:编写 Dubbo 服务提供者
java·dubbo·交友
墨云安全1 小时前
内网资产无法暴露到公网,怎么做安全检测?2026 年内网渗透测试的落地路径
开发语言·安全·网络安全·渗透测试·php
秋饼1 小时前
Spring AI 2.0 结构化输出企业级实战:从 BeanOutputConverter 源码到生产级解析容错
java·ai·技术分享·后端开发
摇滚侠1 小时前
《计算机是如何工作的:人人都能懂的计算机软硬件工作原理》第 9 章 机器码与汇编语言 阅读笔记 9
java·开发语言·笔记
Cc.Y1 小时前
Java零基础入门:深入Java核心:文件IO与序列化全解
java·开发语言·python