Java中catch块中返回的奇怪问题

问题描述

| 我使用的try / catch块有一个奇怪的问题。我有这个方法,它只是从远程服务中获取一些数据并将其存储。
public WFSGetCapabilitiesResponse wfsGetCapabilities(String url) {
    WFSGetCapabilitiesResponse response = new WFSGetCapabilitiesResponse();

    try {
        WFSDataStore data = loadWFSCapabilities(url);
        String[] typeNames = data.getTypeNames();
        ArrayList<WFSFeatureTypeBase> wfsLayers = new ArrayList<WFSFeatureTypeBase>();
        for (int i = 0; i < typeNames.length; i++) {
            String typeName = typeNames[i];

            WFSFeatureTypeBase newLayer = new WFSFeatureTypeBase();
            newLayer.setTypeName(typeName);
            newLayer.setName(typeName.split(\":\")[1]);
            newLayer.setTitle(data.getFeatureTypeTitle(typeName));
            newLayer.setAbstract(data.getFeatureTypeAbstract(typeName));
            newLayer.setServiceUrl(url.split(\"\\\\?\")[0]);

            wfsLayers.add(newLayer);
        }
        response.setWFSLayers(wfsLayers);
    } catch (IOException e) {
        response.setError(WCSCapabilitiesResponse.IO_EXCEPTION);
        response.setErrorMessage(e.getMessage());
        response.setSuccessful(false);
        e.printstacktrace();
        return response;
    }
    return response;
}
如果使用此代码运行,则会得到一个空指针异常(\'data \'为空,但并不真正知道它是否相关)。但是,如果我从catch块中删除return语句,一切都很好。 奇怪的是,无论哪种情况都不会捕获IOException,所以我看不到为什么它会产生这种影响。 再说一次,使用catch块中的return不能正常工作,没有它就可以了...我真的不明白为什么会发生这种情况。 有任何想法吗?     

解决方法

        好吧,我首先想到的是,仅当抛出
IOException
时the1ѭ块才会产生变化-因此我们可以肯定地知道这种情况正在发生。同样,我们知道,没有catch块,此异常将传播到
wfsGetCapabilities
方法之外(大概是在删除catch块时添加了适当的
throws
声明)。 因此,在“正在工作”的情况下,调用代码很有可能将IOException捕获到更高的级别并以某种方式处理它,从而使您的方法似乎可以根据输出判断。当然,您的方法无效,并引发了异常,但也许在错误情况下会调用默认的后备(或类似方法)? 因此,这是“奇怪的”部分,有望解决。至于“问题”部分,如果您用catch块抛出了5英镑,但不是没有,则很明显,您的catch块逻辑并不正确,并导致了此问题。从您发布的内容来看,这些直接引用看起来都不为空-查看堆栈跟踪并确定从哪一行引发异常,然后像处理其他NPE一样对其进行修复。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...