gpt4 book ai didi

java - RuntimeException 以外的异常

转载 作者:行者123 更新时间:2023-12-02 05:52:27 25 4
gpt4 key购买 nike

Java中除了RuntimeException之外还有其他可能发生的异常吗?谢谢。

最佳答案

是的,有三种种。

检查异常

编译器会让您知道何时可以抛出它们,很可能是由于环境中的故障​​。

如果程序可以用它们做某事,则应该捕获它们,否则最好让它们离开。

其中大部分继承自

java.lang.Exception

或来自

java.lang.Throwable

虽然继承前者更好。

例如:

java.io.IOException

表示发生某种 I/O 异常的信号。此类是由失败或中断的 I/O 操作产生的一般异常类。

错误

这些是特殊类型的异常。它们不应该被捕获,因为当它们发生时意味着刚刚发生了非常糟糕的事情。

它们都继承自

java.lang.Error

例如:

java.lang.OutOfMemoryError

当 Java 虚拟机因内存不足而无法分配对象且垃圾收集器无法提供更多内存时抛出该异常。

java.lang.StackOverflowError

由于应用程序递归太深而发生堆栈溢出时抛出。

运行时异常

用于识别程序员故障,而不是资源故障。

编码时“通常”可以避免运行时异常。如果你有这样的情况,你很可能做错了什么。

有时会捕获运行时异常,但是,除非您确切知道自己在做什么以及为什么,否则捕获它们是一种不好的做法(再次强调,除非这正是您所需要的)

它们继承自

java.lang.RuntimeException 

例如

java.lang.ArrayIndexOutOfBoundsException

抛出该异常表示已使用非法索引访问了数组。索引为负数或者大于等于数组大小

java.lang.NullPointerException

当应用程序在需要对象的情况下尝试使用 null 时抛出

关于最后两个,大多数的情况,可以通过仔细编程并了解程序的状态来避免(这个数组有 5 个元素吗?为什么我应该尝试访问-1 或 6。这个引用是 null 吗?为什么我应该调用 null.toString() )

虽然我和那些声称所有 NPE 都应该被捕获的人发生过争论。好吧我能说什么。

关于java - RuntimeException 以外的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/462501/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com