Java 找不到符号错误

Java 找不到符号错误,java,scope,Java,Scope,让我先道歉。我已经编写代码很长时间了,但我对Java还是新手。我觉得这应该是一个简单的错误,但我已经为此工作了半个小时,但毫无结果: public String getHtml(HttpServletRequest request) { try { WebPageFetcher fetcher = new WebPageFetcher("http://google.com"); } catch (Exception e) { log.error("

让我先道歉。我已经编写代码很长时间了,但我对Java还是新手。我觉得这应该是一个简单的错误,但我已经为此工作了半个小时,但毫无结果:

public String getHtml(HttpServletRequest request) {
    try {
        WebPageFetcher fetcher = new WebPageFetcher("http://google.com");
    } catch (Exception e) {
        log.error("WebPageFetcher failed ...");
    }

    return "<div id=\"header\">" + fetcher.getPageContent() + "</div>";
}

我做错了什么?

抓取器仅在声明它的块try块中可见。尝试在块之前声明,使其在整个方法中可见:

WebPageFetcher fetcher = null;
try {
    fetcher = new WebPageFetcher("http://google.com");
}

返回时,变量
fetcher
超出范围

尝试:

publicstringgethtml(HttpServletRequest){
试一试{
WebPageFetcher fetcher=新的WebPageFetcher(“http://google.com");
//范围内返回
返回“+fetcher.getPageContent()+”;
}捕获(例外e){
log.error(“WebPageFetcher失败…”);
}
返回/*有意义的东西*/“500”;
}

变量
fetcher
的生存期仅在最封闭的范围内,即它周围最嵌套的一对大括号(
{}
)。因此,当您到达要使用它的
return
语句时,它就不再存在了。

如果这样做,您肯定需要添加一个If语句来检查
fetcher
在try catch之外是否为null。另一种方法是在try块中移动return语句,并在引发异常时执行一些操作(例如rethrow异常、returnnull等)Yes。谢谢你的改进!同样,如果你承认可能发生异常,那么这是一个NPE等待发生…是的,我几乎只担心范围,但返回应该在try/catch中。。。编辑。。。
WebPageFetcher fetcher = null;
try {
    fetcher = new WebPageFetcher("http://google.com");
}
public String getHtml(HttpServletRequest request) {
    try {
         WebPageFetcher fetcher = new WebPageFetcher("http://google.com");
         // return within scope
         return "<div id=\"header\">" + fetcher.getPageContent() + "</div>";
    } catch (Exception e) {
        log.error("WebPageFetcher failed ...");
    }
     return /*something that make sense*/ "<html>500</html>";
}