如何在Java中抛出一般异常?

时间:2011-08-04 13:51:07

标签: java exception

考虑这个简单的程序。该程序有两个文件:

Vehicle.java:


class Vehicle {
    private int speed = 0;
    private int maxSpeed = 100;

    public int getSpeed()
    {
        return speed;
    }

    public int getMaxSpeed()
    {
        return maxSpeed;
    }

    public void speedUp(int increment)
    {
        if(speed + increment > maxSpeed){
            // throw exception
        }else{
            speed += increment;
        }
    }

    public void speedDown(int decrement)
    {
        if(speed - decrement < 0){
            // throw exception
        }else{
            speed -= decrement;
        }
    }
}

HelloWorld.java:

public class HelloWorld {

    /**
     * @param args
     */
    public static void main(String[] args) {

        Vehicle v1 = new Vehicle();
        Vehicle v2 = new Vehicle();

            // do something

            // print something useful, TODO         
        System.out.println(v1.getSpeed());
    }

}

正如你在第一堂课中看到的那样,我添加了一个注释(“// throw exception”),我想抛出异常。我是否必须为异常定义自己的类,或者我可以使用Java中的一些常规异常类吗?

8 个答案:

答案 0 :(得分:100)

您可以创建自己的Exception类:

public class InvalidSpeedException extends Exception {

  public InvalidSpeedException(String message){
     super(message);
  }

}

在您的代码中:

throw new InvalidSpeedException("TOO HIGH");

答案 1 :(得分:41)

您可以使用IllegalArgumentException:

public void speedDown(int decrement)
{
    if(speed - decrement < 0){
        throw new IllegalArgumentException("Final speed can not be less than zero");
    }else{
        speed -= decrement;
    }
}

答案 2 :(得分:13)

有很多异常要抛出,但这是你抛出异常的方式:

throw new IllegalArgumentException("INVALID");

同样是的,您可以创建自己的自定义例外。

编辑:还要注意例外情况。当您抛出异常(如上所述)并捕获异常时:可以访问您在异常中提供的String抛出getMessage()方法。

try{
    methodThatThrowsException();
}catch(IllegalArgumentException e)
{
  e.getMessage();
}

答案 3 :(得分:6)

这真的取决于你抓住它后要对该异常做什么。如果您需要区分异常,则必须创建自定义Exception。否则你只能throw new Exception("message goes here");

答案 4 :(得分:5)

最简单的方法是:

Comparator

但是,您的代码中无法访问以下行。所以,我们有两种方式:

  1. 在方法的底部抛出泛型异常。 \
  2. 如果您不想执行1,则抛出自定义异常。

答案 5 :(得分:4)

Java为不同的场景提供了大量的内置异常。

在这种情况下,你应该抛出一个IllegalArgumentException,因为问题是调用者传递了一个错误的参数。

答案 6 :(得分:1)

您可以定义自己的异常类,扩展java.lang.Exception(用于检查异常 - 必须捕获的那些),或者扩展java.lang.RuntimeException - 不必捕获这些异常。另一个解决方案是查看Java API并找到描述您情况的适当异常:在这种特殊情况下,我认为最好的是IllegalArgumentException

答案 7 :(得分:1)

取决于,您可以抛出更一般的异常或更具体的异常。对于更简单的方法,更常见的例外就足够了。如果方法很复杂,那么抛出更具体的异常将是可靠的。