首頁  >  文章  >  拋出異常而不是返回。方法傳回的實際類型是什麼?

拋出異常而不是返回。方法傳回的實際類型是什麼?

王林
王林轉載
2024-02-22 13:58:141041瀏覽

php小編子墨帶來的java問答文章將解答一個常見問題:「拋出異常而不是返回。方法返回的實際類型是什麼?」在Java中,當方法拋出異常時,方法的傳回類型實際上是vo​​id,而不是拋出異常的類型。這意味著方法並沒有傳回任何值,而是在遇到異常時直接拋出。在處理異常時,可以使用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刪除