java 选中与未选中异常

0qx6xfy6  于 2023-03-28  发布在  Java
关注(0)|答案(7)|浏览(99)

我研究过然而,对于未检查的异常,编译器不会强制客户端程序员捕捉异常或在throws子句中声明异常。事实上,客户端程序员甚至可能不知道异常可能会被抛出。例如,StringIndexOutOfBoundsException由String的charAt()方法抛出。
什么意思?
根据这段代码,没有必要在代码中放置try catch块,但我看到编译器强制将代码放在try catch块中。
我很困惑他们到底是什么?

8yparm6h

8yparm6h1#

未检查的异常是那些扩展RuntimeException类的异常。编译器不会强制您捕获此类异常或强制您在方法中使用throws关键字声明它。所有其他异常类型(不扩展RuntimeException)都被检查,因此必须声明为抛出和/或捕获。
当你希望你的方法的调用者(即你的API的用户)在你的API中显式地处理异常情况时,使用检查异常。当你相信调用能够对异常情况做一些有意义的事情时,就声明检查异常,比如重试调用,回滚更改或将其转换为一些用户可读的错误消息。
如果您认为调用对异常没有任何用处(特别是当它代表一个bug或API的错误使用时),那么应该取消检查异常。此外,具有太多检查异常的API可能会令人讨厌(例如,尝试使用java reflection API=)

hxzsmxv2

hxzsmxv22#

  • 检查异常对于处理程序正常运行中发生的事件很有用。例如,当文件无法打开时抛出IOException。即使程序没有任何错误,这些异常也会发生。因此,有必要告诉程序如何处理异常。
  • 未检查的异常对于识别代码中的缺陷很有用。例如,在null对象上读取值时会引发NullPointerException。因此,未检查的异常表示需要程序员手动修复的问题。为了避免错误行为,程序崩溃是合理的。因此不需要try-catch块(但是为了提供缓解,例如向用户显示错误,可能需要try-catch块)。
dm7nw8vv

dm7nw8vv3#

你的问题到底是什么?编译器不应该(也不会)强迫你去尝试/捕捉未经检查的异常,那将违背它们的本质。
一般的想法是,检查异常是你可以预见的,但可能是基于你无法控制的输入,你必须处理。未检查异常通常代表程序中的错误。
有很多人认为检查异常在Java平台中是一个错误,他们很少使用或根本不使用它们。

2izufjch

2izufjch4#

这是因为,
1.检查异常不是程序员的错误造成的,相反,它们是我们(程序员)不期望做太多事情的严重后果。
1.在未检查异常的情况下,它是由于程序员的错误而产生的异常,通常可以由程序员自己解决。
检查以下链接:
Why RunTime Exceptions are unchecked ?
Checked vs Unchecked Exception ?

f8rj6qna

f8rj6qna5#

所有异常都是运行时的一部分,而不是编译时的一部分。有两种异常:检查异常和未检查异常。检查异常的例子是IO异常,ClassNotFound异常,未检查异常的例子是运行时异常。在检查异常的情况下,错误或警告消息在编译时出现,以便用户在运行时通过使用throws关键字来处理它。它用于将异常抛出到默认的catch机制系统中。但是在未检查异常的情况下,编译时不会有警告。

gdrx4gfi

gdrx4gfi6#

**检查异常

在编写代码时需要检查、处理或应该注意的异常称为检查异常。例如:1.我们有FileNotFoundException --〉,当我们编写一些与文件类相关的代码时,会发生这个异常。在这种情况下,为了处理它们,我们必须处理这些异常。2.另一个例子是ParseException,当我们处理日期函数时,会发生这个异常。

未检查异常

这些是在编码过程中可选处理的异常。是否处理它们取决于我们。如果我们未能处理它们,则有可能在执行过程中出现运行时错误。例如:我们有NullPointerException,ArithemeticException,NosSuchElementFoundException等等。这些就像是可选的东西,我们甚至不需要处理它们。甚至jvm或编译器也不会建议我们处理它们。**

wko9yo5t

wko9yo5t7#

简单地说,

*检查异常是那些可以并且应该由你的代码处理的异常(因此编译器会强制你处理它们)
*unchecked exceptions是那些超出程序员控制的异常(因此编译器不会强制您处理它们)。

即使在创建自定义异常时也使用相同的规则。

相关问题