如何在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();
但是下面的代码在你的代码中是不可访问的。 所以我们有两种方法:
- 在方法的底部抛出一般的exception。 \
- 抛出一个自定义exception,如果你不想做1。
对于不同的场景,Java有大量的内置exception。
在这种情况下,您应该抛出一个IllegalArgumentException
,因为问题是调用者传递了一个错误的参数。
你可以定义你自己的exception类扩展java.lang.Exception(这是为检查exception – 这些必须被捕获),或扩展java.lang.RuntimeException – 这些exception不必被捕获。 另一个解决scheme是查看Java API并find适当的exception来描述你的情况:在这种情况下,我认为最好的是IllegalArgumentException
。
这取决于,你可以抛出一个更普遍的例外,或更具体的例外。 对于更简单的方法,更一般的例外就足够了。 如果方法很复杂,那么抛出一个更具体的exception将是可靠的。