提问人:Richard Knop 提问时间:8/4/2011 最后编辑:Peter MortensenRichard Knop 更新时间:9/1/2020 访问量:245439
如何在 Java 中抛出一般异常?
How can I throw a general exception in Java?
问:
考虑这个简单的程序。该程序有两个文件:
文件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 中是否有一些通用的异常类可以使用?
答:
好吧,有很多异常可以抛出,但以下是抛出异常的方法:
throw new IllegalArgumentException("INVALID");
此外,是的,您可以创建自己的自定义例外。
关于异常的说明。当您抛出异常(如上所述)并捕获异常时:可以访问您在异常中提供的异常,请抛出该方法。String
getMessage()
try{
methodThatThrowsException();
}catch(IllegalArgumentException e)
{
e.getMessage();
}
评论
(speed < 0)
speed == 0
speedDown
Java 针对不同的场景提供了大量的内置异常。
在这种情况下,应引发 IllegalArgumentException
,因为问题在于调用方传递了错误的参数。
评论
可以使用 IllegalArgumentException:
public void speedDown(int decrement)
{
if(speed - decrement < 0){
throw new IllegalArgumentException("Final speed can not be less than zero");
}else{
speed -= decrement;
}
}
评论
RuntimeException
这实际上取决于您在捕获该异常后要对它做什么。如果您需要区分您的异常,那么您必须创建您的自定义 .否则,你可以只是Exception
throw new Exception("message goes here");
评论
Exception
已选中。我不确定这在这里是否富有成效。
RuntimeException
您可以定义自己的异常类来扩展 java.lang.Exception(这是针对已检查的异常 - 必须捕获的异常),或扩展 java.lang.RuntimeException - 不必捕获这些异常。
另一种解决方案是查看Java API并找到一个描述您的情况的适当异常:在这种特殊情况下,我认为最好的例外是。IllegalArgumentException
您可以创建自己的 Exception 类:
public class InvalidSpeedException extends Exception {
public InvalidSpeedException(String message){
super(message);
}
}
在代码中:
throw new InvalidSpeedException("TOO HIGH");
这要视情况而定。您可以引发更一般的异常,也可以引发更具体的异常。对于更简单的方法,更一般的例外就足够了。如果方法很复杂,那么抛出更具体的异常将是可靠的。
最简单的方法是:
throw new java.lang.Exception();
但是,以下行在代码中无法访问。因此,我们有两种方法:
- 在方法底部引发泛型异常。
- 抛出自定义异常,以防您不想执行 1.
评论
speedDown
slowDown