如何在Java中正确覆盖异常

时间:2016-04-18 19:28:39

标签: java

我遇到自定义异常的问题。如果捕获到标准异常,我想抛出并捕获我自己的异常。但是当我尝试在catch块中抛出自己的异常时,这是不可能的。你能告诉我怎么做得好吗? :(

SampleClass.java:

public class SampleClass {

    int[] arr = new int[6];

    public void fillArray() {
        for (int i = 0; i < 6; i++) {
            arr[i] = i;
        }
    }

    public void getElement(int index) {
        try {
            System.out.println(arr[index]);
        } catch (IndexOutOfBoundsException ex) {
            throw new MyIoobEx();
        } catch (MyIoobEx e) {
            e.getMessage();
        }
    }

    public static void main(String[] args) {

    }
}

MyIoobEx.java:

    public class MyIoobEx extends IndexOutOfBoundsException {
        @Override
        public String getMessage() {
            return "Bad index given";
        }
}

3 个答案:

答案 0 :(得分:2)

如果你想抛出另一个Exception,你必须用另一个 try-catch 包围整个逻辑,以便捕获你正在抛出的嵌套异常。< / p>

public void getElement(int index) {

      try {           

            try {
                System.out.println(arr[index]);
            } catch (IndexOutOfBoundsException ex) {
                throw new MyIoobEx();
            } catch (MyIoobEx e) {
                e.getMessage();
            }

        } catch (MyIoobEx e) {
             e.getMessage();
     }
}

答案 1 :(得分:1)

你在链上抛出一个新的错误。 try-catch语句不能“捕获”它抛出的错误,你需要在整个事情中再试一次。{/ p>

答案 2 :(得分:1)

如果你想在捕获一个之后抛出自己的异常,你需要用另一个try块包围catch块。另一种方法是将自己的例外投射到被捕获的Exception课程中......但我不知道它是否符合您的目的。

你可以这样做:

try{
    try{
        throw new Exception("original exception");
    }
    catch(Exception e){
        throw new CustomException();
    }
}
catch(CustomException e){
   //overrides original exception
}

......或者你可以这样做:

try{
    throw new Exception("original exception");
}
catch(Exception e){
    //you should do some query on what kind of exception caught here
    e = new CustomException("new exception");
}    

一般来说,我不知道你为什么要这样做呢?对我来说似乎是一个额外的步骤。