如果我传播一个异常,我最后是否必须抓住它?
假设我有这段代码:
public class InvalidDataException extends Exception {
public InvalidDataException (String e){
super(e);
}
}
public class Vehicle {
private double speed;
private int vin;
public Vehicle (double nspeed, int nvin) throws InvalidDataException{
setVin(nvin);
setSpeed(nspeed);
}
public double getSpeed() {
return speed;
}
public void setSpeed(double speed) throws InvalidDataException{
if (speed < 1){
throw new InvalidDataException("negative speed: " + speed);
}
this.speed = speed;
}
public int getVin(){
return vin;
}
public void setVin(int speed){
this.vin = speed;
}
}
这样可以,还是我必须抓住它?
答案 0 :(得分:2)
您必须在某处捕获它,否则您的应用程序将退出显示(或记录)该异常的堆栈跟踪。
但是,你应该抓住它们。基本上,您应该在可以对其进行操作的地方捕获它们,例如更改输入数据,询问用户其他输入或仅通知用户错误。
答案 1 :(得分:2)
从语法上讲,它可以做到这一点,但是现在调用Vehicle构造函数的人必须担心Exception,所以你应该考虑它是否在语义上是正确的。在这个例子中,传播异常是可以接受的,因为构造函数采用初始速度,这可能是负的。如果不是这种情况,我会抓住Execption
答案 2 :(得分:2)
Java中的已检查异常会被传播,直到发生以下情况之一:
请注意,除非明确捕获,否则还会传播未经检查的异常(即从RuntimeException扩展的异常)
答案 3 :(得分:0)
你不需要自己捕捉它,但你可能想要。如果您自己不处理它,它将继续传播到JVM,此时它将崩溃并将堆栈跟踪打印到标准错误。
如果异常是您的应用程序可以处理和恢复的内容,那么您显然需要在某个地方放置一个可以处理这种特定情况的catch语句。