异常有什么,异常类有什么

在Java中,异常(Exception)是一种在程序运行过程中出现的不正常情况。异常机制提供了一种从错误中恢复的途径。异常分为两大类:检查异常(Checked Exception)运行时异常(Runtime Exception)。此外,还有错误(Error),尽管它们在语义上和异常类似,但它们表示系统级的异常情况。

1. 异常分类

检查异常(Checked Exception)

这些异常在编译时由编译器检查。如果方法抛出一个检查异常,必须要么捕获它(使用 try-catch 块),要么在方法签名中声明抛出它(使用 throws 关键字)。

常见的检查异常类

  • IOException
  • SQLException
  • ClassNotFoundException
  • FileNotFoundException
运行时异常(Runtime Exception)

这些异常在编译时不进行检查,只有在运行时抛出。这些异常通常是程序逻辑错误导致的,例如非法参数传递给方法等。

常见的运行时异常类

  • NullPointerException
  • ArrayIndexOutOfBoundsException
  • ArithmeticException
  • IllegalArgumentException
  • ClassCastException
错误(Error)

这些是由Java虚拟机(JVM)抛出的严重错误,程序无法处理或恢复。例如,内存溢出(OutOfMemoryError)。错误通常表示系统级别的问题,程序不应该试图捕获这些错误。

常见的错误类

  • OutOfMemoryError
  • StackOverflowError
  • VirtualMachineError
  • AssertionError

2. 异常类结构

在Java中,所有的异常类都继承自 java.lang.ThrowableThrowable类有两个重要的子类:ErrorException。其中,Exception 又进一步分为 RuntimeException 和其他检查异常。

异常类层次结构

java.lang.Object
  └── java.lang.Throwable
       ├── java.lang.Error
       └── java.lang.Exception
            ├── java.lang.RuntimeException
            └── 其他检查异常

3. 常见异常类

检查异常类(Checked Exception Classes)

  • java.io.IOException:IO操作失败或中断。
  • java.sql.SQLException:数据库访问错误。
  • java.lang.ClassNotFoundException:无法找到指定的类。
  • java.io.FileNotFoundException:尝试打开的文件不存在。

运行时异常类(Runtime Exception Classes)

  • java.lang.NullPointerException:调用了空对象的属性或方法。
  • java.lang.ArrayIndexOutOfBoundsException:数组下标越界。
  • java.lang.ArithmeticException:算术运算错误,如被零除。
  • java.lang.IllegalArgumentException:非法参数。
  • java.lang.ClassCastException:对象无法强制转换到指定的类型。

错误类(Error Classes)

  • java.lang.OutOfMemoryError:JVM没有足够的内存。
  • java.lang.StackOverflowError:方法调用栈溢出。
  • java.lang.VirtualMachineError:虚拟机发生内部错误。
  • java.lang.AssertionError:断言失败。

4. 自定义异常

有时候,标准的异常类不能完全描述问题,这时可以创建自定义异常类。自定义异常类通常继承自 ExceptionRuntimeException

自定义检查异常示例

public class CustomCheckedException extends Exception {
    public CustomCheckedException(String message) {
        super(message);
    }
}

自定义运行时异常示例

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

5. 异常处理示例

捕获和处理异常

public class ExceptionHandlingExample {
    public static void main(String[] args) {
        try {
            // 可能抛出检查异常的方法
            checkedExceptionMethod();
        } catch (CustomCheckedException e) {
            System.out.println("Caught custom checked exception: " + e.getMessage());
        }

        try {
            // 可能抛出运行时异常的方法
            runtimeExceptionMethod();
        } catch (CustomRuntimeException e) {
            System.out.println("Caught custom runtime exception: " + e.getMessage());
        }
    }

    public static void checkedExceptionMethod() throws CustomCheckedException {
        throw new CustomCheckedException("This is a custom checked exception");
    }

    public static void runtimeExceptionMethod() {
        throw new CustomRuntimeException("This is a custom runtime exception");
    }
}

总结

  • 检查异常需要在编译时处理或声明,表示可以预期的异常情况。
  • 运行时异常通常是编程错误,只有在运行时才会发现,不需要在编译时处理。
  • 错误是严重的系统级问题,程序不应尝试处理。
  • 可以通过继承 ExceptionRuntimeException 创建自定义异常类,以更好地描述特定的异常情况。
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清石小猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值