我正在做一些代码清理,删除捕获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);
}
答案 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());
}
}
还包含捕获未经检查的例外情况,因此始终允许此阻止。