首页  >  文章  >  抛出异常而不是返回。方法返回的实际类型是什么?

抛出异常而不是返回。方法返回的实际类型是什么?

王林
王林转载
2024-02-22 13:58:141075浏览

php小编子墨带来的java问答文章将解答一个常见问题:“抛出异常而不是返回。方法返回的实际类型是什么?”在Java中,当方法抛出异常时,方法的返回类型实际上是void,而不是抛出异常的类型。这意味着方法并没有返回任何值,而是在遇到异常时直接抛出。在处理异常时,可以使用try-catch语句来捕获异常并进行相应处理,确保程序的稳定性和可靠性。

问题内容

我正在深入挖掘 Java 中 URL 类的 openStream() 方法,以找到其实际的返回类型。来自OpenJDK,其来源是:

公共最终InputStream openStream()抛出java.io.IOException { 返回 openConnection().getInputStream(); }

返回类型显然是 InputStream 的 Object,它是一个抽象类。那么,这是声明的类型,返回对象的实际类型是什么? 我遵循 openConnection() 方法,该方法返回 URLConnection 类的对象。我还顺着它的源码找到了getInputSteam()的返回。最后,我找到了这段代码:

公共输入流 getInputStream() 抛出 IOException { throw new UnknownServiceException("协议不支持输入"); }

我的问题是 getInputStream() 的实际返回类型是什么,这将是 openStream() 的实际返回类型?

解决方法

这是使用 HTTPS 地址的示例。

使用调试过程,并在URL#openStream方法上放置断点
而且,我的意思是实际的方法,而不是您的调用。

从这里,“步入”openConnection方法。
然后,“步入”openConnection(URL)方法。

这会将您带到 sun.net.www.protocol.https.Handler 类。

再次前进到 openConnection(URL, Proxy) 方法,该方法返回 sun.net.www.protocol.https.HttpsURLConnectionImpl 的新实例。

进一步遍历,您会发现通过 sun.net.www.protocol.https.DelegateHttpsURLConnection 类返回了 HttpsURLConnection 的实例。

你知道,当我几年前开始使用 Java 时,我(几乎)有这个确切的问题,除了我对 java.awt.Graphics 感到困惑。

参见Programming to an interface

这个想法是,您实际上不需要知道精确的类 - 任何实现该接口的东西都可以换入或换出。随着时间的推移,这使得代码的适应性更强。

以上是抛出异常而不是返回。方法返回的实际类型是什么?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文转载于:stackoverflow.com。如有侵权,请联系admin@php.cn删除