为什么Eclipse特别处理java.lang.Exception

时间:2016-06-17 14:40:04

标签: java eclipse

我正在做一些代码清理,删除捕获Throwable并捕获Exception,但我注意到Eclipse中有一些奇怪的行为。

在这段代码中,Eclipse会将IOException路径标记为无法访问,这是正确的,但不是Exception路径。异常路径是否同样无法访问? java.lang.Exception是一个经过检查的异常?对?

    try {
        log.info("Some message");
    } catch (IOException e) {
        log.debug(e.getMessage(), e);
    } catch (Exception e) {
        log.info(e.getMessage(), e);
    }

2 个答案:

答案 0 :(得分:2)

java.lang.Exception是所有异常的父类(尽管不是所有的Throwable都是!)。因为它也是java.lang.RuntimeException的父级,所以你总是可以尝试捕获它,因为任何一段代码都可能抛出RuntimeException

答案 1 :(得分:1)

Exception catch块无法访问,因为Exception还包含所有未经检查的异常(扩展RuntimeException的异常,Exception是{throws的子类1}})。

已检查和未检查的异常之间的区别在于,对于前者,需要一个方法来捕获和处理异常,或者声明它可能会抛出带有catch子句的异常;对于后者(未经检查),此要求不存在,即使没有声明它可能抛出它,方法也可以抛出未经检查的异常。 (有关详细信息,请参阅Oracle Java教程中的The Catch or Specify Requirement)。

要确定try块是否无法访问,编译器只会查看catch (Exception e)块中代码中可能出现的已检查异常。

由于您的package eu.anastasis.readingtrainer.configuration; import java.util.List; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.HandlerExceptionResolver; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import org.springframework.web.servlet.handler.SimpleMappingExceptionResolver; @Configuration @EnableWebMvc public class ConfigurationAdapter extends WebMvcConfigurerAdapter { @Override public void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers) { exceptionResolvers.add(new SimpleMappingExceptionResolver()); } } 还包含捕获未经检查的例外情况,因此始终允许此阻止。