0
  1. method processExceptions() 应该调用方法BEAN.methodThrowExceptions并处理异常:

1.1。如果发生异常FileSystemException,则通过调用方法记录它BEAN.log并向前抛出

1.2. 如果发生异常CharConversionException或任何其他IOException情况,只需通过调用方法记录它BEAN.log

  1. 添加您在 2.1 中转发的异常的类/类型。到processExceptions()方法签名。

  2. 处理方法中剩余的异常main()并记录。利用try..catch

我尝试了不同的解决方案。它有效,但不是应有的。throwsin 方法的正确位置是什么。或者也许我根本不应该使用它们?如果我不放置它们,我将无法使用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();
        }
    }
}
4

2 回答 2

0

如果一个方法能够抛出不是 RuntimeException 的异常(直接抛出或调用可以抛出异常的方法),它应该处理异常或声明它抛出异常,以便任何其他调用此异常的方法方法会知道它可能会遇到异常,并且可以处理它或声明它抛出(等等)。

由于您正在处理已检查的异常,因此没有避免声明抛出的干净方法,但是有一个(混乱的)解决方法。您可以将异常包装在 RuntimeException 中并抛出它,当您想要处理它时,您可以从 re.getCause();

public class Solution {

    public static StatelessBean BEAN = new StatelessBean();

    public static void main(String[] args) {
        try{
            processExceptions();
        }
        catch (RuntimeException re){
            if (!(re.getCause() instanceof CharConversationException)) {
                //handle the case in which the exception was not CCE and not FSE not IOException
            }
        }
    }


    public static void processExceptions() {
        try{
            BEAN.methodThrowExceptions();
        } catch (CharConversionException cce){
            BEAN.log(e);
            throw new RuntimeException(cce);
        } catch (FileSystemException fse){
            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();
        }
    }
}

我不确定我是否正确理解了您的问题,这就是您想要的:)

于 2014-02-28T11:34:48.377 回答
0

我认为顺序:

在方法 main() 中处理剩余的异常

意味着您不仅应该捕获 ,还应该通过以下方式捕获CharConversionException所有其他异常:

catch (Exception e)

此外,我认为您应该在help.javarush.net上询问:>

于 2017-04-19T13:55:16.617 回答