Home  >  Article  >  Throw an exception instead of returning. What is the actual type returned by the method?

Throw an exception instead of returning. What is the actual type returned by the method?

王林
王林forward
2024-02-22 13:58:141041browse

The java Q&A article brought by php editor Zimo will answer a common question: "Throw an exception instead of returning. What is the actual type returned by the method?" In Java, when a method throws an exception, the method's The return type is actually void, not the type that throws the exception. This means that the method does not return any value, but throws it directly when an exception is encountered. When handling exceptions, you can use the try-catch statement to catch exceptions and handle them accordingly to ensure the stability and reliability of the program.

Question content

I am digging deeper into the openStream() method of the URL class in Java to find its actual return type. From OpenJDK, its source is:

public final InputStream openStream() throws java.io.IOException { Return openConnection().getInputStream(); }

The return type is obviously InputStream's Object, which is an abstract class. So, this is the declared type, what is the actual type of the returned object? I followed the openConnection() method which returns an object of URLConnection class. I also followed its source code and found the return of getInputSteam(). Finally, I found this code:

Public input stream getInputStream() throws IOException { throw new UnknownServiceException("The protocol does not support input"); }

My question is what is the actual return type of getInputStream() and would this be the actual return type of openStream()?

Workaround

This is an example using a HTTPS address.

Use to debug the process and place a breakpoint on the URL#openStream method .
And, I mean the actual method, not your call.

From here, "step into" the openConnection method.
Then, "step into" the openConnection(URL) method.

This will take you to the sun.net.www.protocol.https.Handler class.

Proceed again to the openConnection(URL, Proxy) method, which returns a new instance of sun.net.www.protocol.https.HttpsURLConnectionImpl.

Traversing further, you will find that an instance of HttpsURLConnection is returned through the sun.net.www.protocol.https.DelegateHttpsURLConnection class.

You know, when I started using Java a few years ago, I (almost) had this exact problem, except I was confused about java.awt.Graphics.

SeeProgramming to an interface

The idea is that you don't actually need to know the precise class - anything that implements the interface can be swapped in or out. This makes the code more adaptable over time.

The above is the detailed content of Throw an exception instead of returning. What is the actual type returned by the method?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:stackoverflow.com. If there is any infringement, please contact admin@php.cn delete