2011-10-05 78 views
0

如果我传播一个异常,我是否必须稍后再捕捉它?传播异常必须在Java中被捕获?

假设我有这样的代码:

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

你不需要需要自己去捕捉它,但你可能想要。如果您自己没有处理它,它将继续传播到JVM,此时它将崩溃并将堆栈跟踪打印到标准错误。

如果异常是你的应用程序可以处理和恢复的东西,那么你显然需要在某处放置一个catch语句来处理这个特定的情况。

2

您必须在某处捕获它,否则您的应用程序将退出显示(或记录)该异常的堆栈跟踪。

这取决于你,但是,你到底抓住了他们。基本上,你应该抓住他们,你可以做些什么,如改变你的输入数据,要求用户输入另一个输入或只是通知用户错误。

2

语法上可以这么做,但现在调用Vehicle构造函数的人不得不担心Exception,因此应该考虑它的语义是否正确。在这个例子中,传播异常是可以接受的,因为构造函数的初始速度可能是负的。如果这wasnt的情况下,我会赶上Execption代替

相关问题