【发布时间】:2014-02-28 10:49:30
【问题描述】:
- 方法
processExceptions() 应该调用方法BEAN.methodThrowExceptions并处理异常:
1.1。如果发生异常FileSystemException,则调用BEAN.log方法记录异常并向前抛出
1.2。如果发生异常CharConversionException 或任何其他IOException,只需通过调用方法BEAN.log 记录它
添加您在 2.1 中转发的异常的类/类型。到
processExceptions()方法签名。在方法
main()中处理剩余的异常并记录它。使用try..catch
我尝试了不同的解决方案。它有效,但不是应有的。 throws 在方法中的正确位置是什么。或者也许我根本不应该使用它们?如果我不放置它们,我将无法使用throw。请帮忙,非常感谢您的宝贵时间。
public class Solution {
public static StatelessBean BEAN = new StatelessBean();
public static void main(String[] args) {
try{
processExceptions();
}
catch (CharConversionException e){
BEAN.log(e);
}
}
public static void processExceptions()throws CharConversionException {
try{
BEAN.methodThrowExceptions();
}
catch (CharConversionException e){
BEAN.log(e);
throw e;
}
catch (FileSystemException e){
BEAN.log(e);
}
catch (IOException e){
BEAN.log(e);
}
}
public static class StatelessBean {
public void log(Exception exception) {
System.out.println(exception.getMessage() + ", " + exception.getClass().getSimpleName());
}
public void methodThrowExceptions() throws CharConversionException, FileSystemException, IOException {
int i = (int) (Math.random() * 3);
if (i == 0)
throw new CharConversionException();
if (i == 1)
throw new FileSystemException("");
if (i == 2)
throw new IOException();
}
}
}
【问题讨论】:
-
这看起来像是对需求的正确再现;然而,要求本身被打破:要么重新抛出 或 日志,从不两者兼而有之。此外,如果
FileSystemException extends IOException,那么显式捕获它是多余的,因为捕获块是相同的。 -
当你说它不能正常工作时,它的确切问题是什么?
-
你的意思是我不能使用 throws 并登录一个 try-catch 块?
-
@Predict_it 你可以。这只是糟糕的风格。
标签: java exception ioexception throw throws