Ano*_*ous 8 java exception checked-exceptions
有人告诉我,在Java中,未经检查的异常可以在try块中捕获,但如果它被捕获,是不是称为已检查异常?
coo*_*ird 13
unchecked异常是不需要在被捕获的异常try
- catch
块.未经检查的异常是RuntimeException
或Error
类的子类.
checked异常是需要在被捕获的异常try
- catch
块.
检查和unchecked异常的定义可参见第11.2节:编译时检查异常的Java语言规范:
未经检查的异常类是类
RuntimeException
及其子类,以及类Error
及其子类.所有其他异常类都是已检查的异常类.
仅仅因为在catch
块中捕获未经检查的异常不会使其成为已检查的异常 - 它只是意味着捕获了未经检查的异常,并在catch
块中处理.
可以catch
是未经检查的异常,然后throw
是新的已检查异常,因此任何调用该方法的方法都可能发生未经检查的异常,并强制调用它来处理某种异常的方法.
例如,NumberFormatException
在处理方法的一些不可解析时可以抛出String
的Integer.parseInt
是未经检查的异常,因此不需要捕获它.但是,调用该方法的方法可能希望其调用者正确处理这样的问题,因此它可能会抛出另一个被检查的异常(不是.的子类RuntimeException
):
public int getIntegerFromInput(String s) throws BadInputException {
int i = 0;
try {
i = Integer.parseInt(s);
catch (NumberFormatException e) {
throw new BadInputException();
}
return i;
}
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,a NumberFormatException
被捕获在try
- catch
块中,并且BadInputException
抛出了一个new (用于检查异常).
该getIntegerFromInput
方法的任何调用者都将被强制捕获BadInputException
,并被迫处理不良输入.如果NumberFormatException
不被捕获和处理,则此方法的任何调用者都必须正确处理异常.
(另外,应该注意的是,吃异常并做一些不重要的事情并不是一种好的做法 - 处理可以执行有意义的异常处理的异常.)
来自Java教程:
归档时间: |
|
查看次数: |
4528 次 |
最近记录: |