如何在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”),我想抛出一个exception。 我是否必须为exception定义自己的类,或者是否有一些Java中可以使用的常规exception类?

你可以创build你自己的Exception类:

 public class InvalidSpeedException extends Exception { public InvalidSpeedException(String message){ super(message); } } 

在你的代码中:

 throw new InvalidSpeedException("TOO HIGH"); 

你可以使用IllegalArgumentException:

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

那么有很多例外抛出,但这里是如何抛出一个exception:

 throw new IllegalArgumentException("INVALID"); 

也是,你可以创build自己的自定义例外。

编辑:另请注意有关例外情况。 当你抛出一个exception(如上图),并捕获exception:在exception中提供的String可以被访问抛出getMessage()方法。

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

这真的取决于你如何处理这个exception后,你抓住它。 如果您需要区分您的exception,那么您必须创build您的自定义Exception 。 否则,你可以throw new Exception("message goes here");

最简单的方法是这样的:

 throw new java.lang.Exception(); 

但是下面的代码在你的代码中是不可访问的。 所以我们有两种方法:


  1. 在方法的底部抛出一般的exception。 \
  2. 抛出一个自定义exception,如果你不想做1。

对于不同的场景,Java有大量的内置exception。

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

你可以定义你自己的exception类扩展java.lang.Exception(这是为检查exception – 这些必须被捕获),或扩展java.lang.RuntimeException – 这些exception不必被捕获。 另一个解决scheme是查看Java API并find适当的exception来描述你的情况:在这种情况下,我认为最好的是IllegalArgumentException

这取决于,你可以抛出一个更普遍的例外,或更具体的例外。 对于更简单的方法,更一般的例外就足够了。 如果方法很复杂,那么抛出一个更具体的exception将是可靠的。