声明的异常仍然抛出错误必须被捕获或声明被抛出

时间:2015-02-22 04:59:34

标签: java exception-handling

首先,我不是Java程序员,我只是修改现有代码以满足我的需求,所以请耐心等待我,因为我对Java的知识非常有限。

这是我的代码的一部分:

public String getIp() throws Exception {
    URL whatismyip = new URL("http://checkip.amazonaws.com");
    BufferedReader in = null;
    try {
        in = new BufferedReader(new InputStreamReader(
                whatismyip.openStream()));
        String ip = in.readLine();
        return ip;
    } finally {
        if (in != null) {
            try {
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

现在,当我尝试拨打getIp()时,我发现编译失败:unreported exception java.lang.Exception; must be caught or declared to be thrown

这是调用getIp()的代码的一部分:

Phrase downloadDate = new Phrase();
downloadDate.add(new Chunk("On: " + new SimpleDateFormat("MMMM d, yyyy").format(new Date()), FONT_DATE));
downloadDate.add(new Chunk(" at " + new SimpleDateFormat("h:mm a z").format(new Date()), FONT_DATE));
Phrase downloader = new Phrase("This article was downloaded by: " + getEperson(), FONT_DATE);
String IP = getIp();
Phrase userIP = new Phrase("IP Address: " + IP, FONT_DATE);
Phrase userDownloadDate = new Phrase(downloadDate);
Paragraph downloadDetails = new Paragraph();
downloadDetails.add(downloader);
downloadDetails.add(downloadDate);
downloadDetails.add(userIP);

这可能是一个微不足道的问题,但我想知道为什么我有错误"必须被抓住或宣布被抛出"何时已在public String getIp()

中声明

2 个答案:

答案 0 :(得分:1)

错误是说调用函数必须捕获或声明被抛出。一旦在方法签名上显式声明了异常,所有调用函数都必须按照错误消息中提到的方式处理该异常。

答案 1 :(得分:1)

您的getIp()方法签名是:

public String getIp() throws Exception {

这意味着此函数可能会抛出异常。 throws子句用于指定函数可以抛出的各种异常。

调用此方法时,必须专门处理可能的所有异常。像:

try {
    String ip = getIp();
} catch (Exception ex) {
    // getIp() failed
}

或者因为你在getIp()方法中使用了try块,如果你确定它没有抛出任何异常,那么你可以删除throws子句,如:

public String getIp() {

并且您的代码应该可以使用。

越位注意:getIp()方法在所有情况下都不返回字符串。只需在其定义的末尾添加return "";即可避免运行时问题。