我遇到自定义异常的问题。如果捕获到标准异常,我想抛出并捕获我自己的异常。但是当我尝试在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";
}
}
答案 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");
}
一般来说,我不知道你为什么要这样做呢?对我来说似乎是一个额外的步骤。