【问题标题】:Why am I getting a unreported exception java.net.MalformedURLException when I'm throwing it already?为什么我已经抛出未报告的异常 java.net.MalformedURLException?
【发布时间】:2020-11-25 13:00:37
【问题描述】:

免责声明:我已经很久没有使用 Java 了。

我创建了这个单例类来创建一个 HttpURLConnection。

public class EstablishConnection {
    HttpURLConnection conn = setupConn("some url");
    private static final EstablishConnection instance = new EstablishConnection();
    
    //private constructor to avoid client applications to use constructor
    private EstablishConnection(){}
​
    public static EstablishConnection getInstance(){
        return instance;
    }
    
    private static HttpURLConnection setupConn(String addr) throws MalformedURLException, IOException, ProtocolException {
        URL url = new URL(addr);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setReadTimeout(10000);
        conn.setConnectTimeout(15000);
        conn.setRequestMethod("POST");
        conn.setDoInput(true);
        conn.setDoOutput(true);
        return conn;
    }
}
​

当我将它扔到 setupConn 时,为什么会收到未报告的 MalformedURLException 异常?

|       HttpURLConnection conn = setupConn("some url");
unreported exception java.net.MalformedURLException; must be caught or declared to be thrown

【问题讨论】:

  • 你在方法签名上抛出了它,但这也意味着调用可以抛出那个异常。错误在于调用,而不是方法本身

标签: java http malformedurlexception


【解决方案1】:

您正在从 setupConn 函数抛出异常,但在此处调用它时您没有处理抛出的异常:

HttpURLConnection conn = setupConn("some url");

您可以在 setupConn 函数中使用 try catch 来处理异常,或者您可以在构造函数中调用该函数,然后从那里重新抛出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-09
    相关资源
    最近更新 更多