Java,在没有 try 块的情况下使用 throw

Mar*_*tin 4 java exception try-catch throw

对于下面的方法,当它不在“try”块内时是否可以抛出异常?

public void setCapacity(x) throws CapacityExceededException {
    if (x > 10) throw new CapacityExceededException(x);
    else this.x = x;
}
Run Code Online (Sandbox Code Playgroud)

und*_*dog 6

是的,当它不在 try 块内时抛出异常是可以的。您所要做的就是声明您的方法抛出异常。否则编译器会报错。

public void setCapacity(x) throws CapacityExceededException {
    if (x > 10) throw new CapacityExceededException(x);
    else this.x = x;
}
Run Code Online (Sandbox Code Playgroud)

如果您CapacityExceededException扩展了运行时异常,您甚至不必这样做。

public void setA(int a) {
            this.a = a;
            if(a<0) throw new NullPointerException();
        }
Run Code Online (Sandbox Code Playgroud)

此代码不会给出任何编译器错误。因为 NPE 是一个 RuntimeException。

当您抛出异常时,异常将传播到调用setCapacity()方法的方法。该方法必须通过 try catch 处理异常,或者通过重新抛出异常将其传播到调用堆栈上。