如何使用投掷?

How to use throws?

我正在学习 Java 并遇到了 throws 关键字。我开始知道它用于我们无法处理或不想处理的异常。

为什么我们不能只使用 exception.printstacktrace?或者在任何情况下 throws 可以执行自动异常处理,或者它只是 reader 的一个关键字来知道该方法可以抛出该异常?

当您声明您的方法 throws SomeCheckedException 时,您需要您的方法的用户处理该异常(或者声明他们在无法处理时自行抛出异常)。它是方法契约的一部分。

如果方法不处理已检查的异常,则该方法必须使用 throws 关键字声明它。 throws 关键字出现在方法签名的末尾。

您可以使用 throw 关键字抛出异常,可以是新实例化的异常,也可以是刚刚捕获的异常。尝试了解 throws 和 throw 关键字的不同。
并且'throws'不执行任何异常处理,它只是告诉将异常处理委托给调用方方法,因为它没有在被调用方法中完成。

exception.printStackTrace() 

exception.getMessage()

您只能在捕获到异常时打印堆栈跟踪。基本上 java 遵循规则 Throw 或 handle with checked exceptions。处理异常正在捕获它们。 还要记住,有些地方你总是必须处理你的异常,但你可以自由选择你想要处理的应用程序流程中的位置。
并且'throws'不执行任何异常处理,它只是告诉将异常处理委托给调用方方法,因为它没有在被调用方法中完成。因此被调用的方法知道它必须处理或再次返回的异常(但如前所述,某些必须处理的地方)

PS: 非常好 question 因为 printstacktrace 被认为是坏的

实际使用

如果您正在处理企业应用程序,并且任何异常出现在中间层,这些异常都需要传播到控制器,这是 throws 关键字的实际示例之一。

在此类应用程序中,我们在控制器中编写导航逻辑并处理日志记录,因此有必要将您的异常消息传播到控制器层。

不想处理? 永远不会发生,您始终必须处理异常。但是当你抛出一个异常时,就意味着你不想在这个函数中处理这个异常,你想在另一个地方处理这个。

实际使用 因人而异!

假设我开发了一个具有方法 animateImages(InputStream image) 的 API 现在,如果传递有效图像,此方法将正常工作,但如果传递 PDF 这个方法,这个方法惨败。

所以如果我会处理异常,我只是放一个 stackTrace() 并记录错误,但这对你没有用。

我想让你知道原因并做出相应的反应并发送有效的图像文件或任何你想做的事情。

这就是为什么我们通常会在希望消费者处理异常时抛出任何异常。