3

在 java 中预定义的异常会自动抛出。像,

int a=10, b=0;
c = a/b;

抛出算术异常

int a[3] = {1, 2, 3};
int b = a[4];

抛出 ArrayOutOfBoundException

其中在用户定义异常的情况下,我们应该创建该异常类的对象并手动抛出它。我可以让自己的异常表现得像上述两种情况吗?

4

3 回答 3

6

我可以让自己的异常表现得像上述两种情况吗?

不,它必须内置到 JVM 中。

于 2013-08-01T16:48:10.963 回答
1

你可以,但你必须抓住原件,然后扔掉你自己的。

try {
    int a=10, b=0;
    int c=a/b;
catch (Exception e){
    //disregard exception, throw your own
    throw new MyCustomException("My Custom Message");
}

或者,如果您想在通常不存在异常的情况下抛出异常,您只需抛出它!

// In this case, only move forward if a < b
int a = 10, b = 0;
if (a >= b)
    throw new MustBeLessThanException("a must be less than b!");

或者类似的傻事。

请务必使自定义类扩展 Exception 或子类之一。

于 2013-08-01T16:52:23.913 回答
1

不,你所能做的就是抓住然后扔你自己的:

try {
    int a=10, b=0;
    c = a/b;
} catch (ArithmetikException e) {
    throw MyException("Bad!", e); // pass in e to getr a meaningful stacktrace
}

但我真的不建议这样做(除非在您必须这样做的情况下,即当实现一个未声明可能在您的代码中引发的异常的接口时)。但是话又说回来,您的示例都是 RuntimeExceptions (未选中)并且不必声明。

于 2013-08-01T16:52:51.117 回答