ホームページ  >  記事  >  返される代わりに例外をスローします。メソッドによって返される実際の型は何ですか?

返される代わりに例外をスローします。メソッドによって返される実際の型は何ですか?

王林
王林転載
2024-02-22 13:58:141037ブラウズ

PHP エディター Zimo が提供する Java Q&A 記事は、「例外を返す代わりに例外をスローします。メソッドによって返される実際の型は何ですか?」という一般的な質問に答えます。Java では、メソッドが例外をスローするとき、メソッドの戻り値の型は実際には void であり、例外をスローする型ではありません。これは、メソッドが値を返さず、例外が発生したときに値を直接スローすることを意味します。例外を処理する場合、try-catch ステートメントを使用して例外をキャッチし、それに応じて処理することで、プログラムの安定性と信頼性を確保できます。

質問の内容

Java の URL クラスの openStream() メソッドをさらに詳しく調べて、実際の戻り値の型を調べています。 OpenJDK からのソースは次のとおりです:

public Final InputStream openStream() throws java.io.IOException { openConnection().getInputStream(); を返します。 }

戻り値の型は明らかに InputStream の Object であり、抽象クラスです。これは宣言された型ですが、返されるオブジェクトの実際の型は何でしょうか? URLConnection クラスのオブジェクトを返す openConnection() メソッドに従いました。また、そのソース コードをたどったところ、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 の新しいインスタンスを返します。

さらに進むと、HttpsURLConnection のインスタンスが sun.net.www.protocol.https.DelegateHttpsURLConnection クラスを通じて返されることがわかります。

ご存知のとおり、私が数年前に Java を使い始めたとき、java.awt.Graphics について混乱していたことを除けば、まさにこれと同じ問題が (ほぼ) 発生していました。

参照インターフェイスへのプログラミング

アイデアは、実際には正確なクラスを知る必要はなく、インターフェイスを実装するものはすべて交換できる、または交換できるということです。これにより、時間の経過とともにコードの適応性が高まります。

以上が返される代わりに例外をスローします。メソッドによって返される実際の型は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。