java异常

异常是什么

Java 异常是 Java 编程语言中的一种错误处理机制,异常表示在程序执行期间发生的意外情况.

Java异常的类图

在这里插入图片描述受检查异常(Checked Exceptions):已检查异常是在编译时由 Java 编译器强制要求处理的异常。这些异常通常是由外部因素引起的,比如文件不存在、网络连接失败等。开发者必须通过 try-catch 块或者在方法签名中声明 throws 子句来处理这些异常,否则编译器将报错。例如 IOException。
运行异常(Runtime Exceptions):未检查异常是在运行时可能会出现的异常,通常是由程序编码错误或者运行环境问题导致的。这些异常不需要在编码时显式处理,但如果未被处理,将在运行时导致程序终止。常见的未检查异常包括 NullPointerException、ArrayIndexOutOfBoundsException、ArithmeticException 等。

Error错误:一般是指与虚拟机相关的问题,如OutOfMemoryError(内存不足)、StackOverflowError(递归调用或者方法调用栈溢出)、InternalError(虚拟机内部错误),这种错误无法恢复或不可能捕获,将导致应用程序中断。通常应用程序无法处理这些错误,因此应用程序不应该试图使用catch 块来捕获Error对象。
在定义该方法时,也无须在其throws子句中声明该方法可能抛出Error及其任何子类。

异常的优势

1、提高程序的稳定性和可靠性: 异常处理允许程序在出现错误或异常情况时进行适当的处理,从而防止程序因为异常而崩溃或产生不可预测的行为。通过捕获异常并采取相应的措施,可以使程序更加健壮和可靠。

2、分离正常业务逻辑和异常处理逻辑: 使用异常处理机制可以将正常业务逻辑与错误处理逻辑分离开来,使代码更加清晰、易于理解和维护。这样可以使开发者专注于编写核心业务逻辑,而将异常处理交给专门的代码块来处理。

3、提高代码的可读性: 通过在关键位置捕获异常并在适当的地方处理它们,可以使代码更具可读性。异常处理代码通常与正常的业务逻辑分开,这样可以使代码更加清晰,易于理解。

4、提供更好的用户体验: 在用户交互的应用程序中,良好的异常处理可以提供更好的用户体验。通过捕获并处理异常,程序可以向用户提供友好的错误信息,帮助用户理解发生的问题并采取适当的措施。

5、调试和错误排查: 异常处理提供了一种机制来调试和排查程序中的错误。通过捕获异常并打印相关信息,可以帮助开发者定位问题所在,并采取适当的措施来解决问题。

java中异常的使用

try {
    // 可能会引发异常的代码段
    // 比如:打开文件、连接数据库、进行数组访问等
} catch (ExceptionType1 e) {
    // 处理特定类型的异常
} catch (ExceptionType2 e) {
    // 处理另一种类型的异常
} finally {
    // 无论是否发生异常都会执行的代码段
    // 比如:关闭文件、关闭数据库连接等
}

throw:抛出一个异常

public class Example {
    public static void main(String[] args) {
        int age = -1; // 假设年龄为负数,这是一个不合法的输入

        try {
            if (age < 0) {
                throw new IllegalArgumentException("年龄不能为负数");
            }
        } catch (IllegalArgumentException e) {
            System.out.println("捕获到异常:" + e.getMessage());
        }
    }
}

throws:在方法上使用

import java.io.FileNotFoundException;

public class Example {
    public static void main(String[] args) {
        try {
            readFile("example.txt");
        } catch (FileNotFoundException e) {
            System.out.println("文件未找到:" + e.getMessage());
        }
    }

    public static void readFile(String fileName) throws FileNotFoundException {
        // 读取文件的代码
        // 假设文件不存在,抛出 FileNotFoundException 异常
        throw new FileNotFoundException("文件不存在");
    }
}

自定义异常

public class MyException extends RuntimeException{
    public MyException(String message){
        super(message);
    }

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

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

public class Example {
    public static void main(String[] args) {
        try {
            int result = divide(10, 0);
            System.out.println("结果:" + result);
        } catch (MyException e) {
            System.out.println("发生自定义运行时异常:" + e.getMessage());
        }
    }

    public static int divide(int dividend, int divisor) {
        if (divisor == 0) {
            throw new MyException ("除数不能为零");
        }
        return dividend / divisor;
    }
}

在这里插入图片描述
常见异常
在这里插入图片描述
图片来自这

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值