考虑这个简单的程序。该程序有两个文件:
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中的一些常规异常类吗?
答案 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
但是,您的代码中无法访问以下行。所以,我们有两种方式:
答案 5 :(得分:4)
Java为不同的场景提供了大量的内置异常。
在这种情况下,你应该抛出一个IllegalArgumentException
,因为问题是调用者传递了一个错误的参数。
答案 6 :(得分:1)
您可以定义自己的异常类,扩展java.lang.Exception(用于检查异常 - 必须捕获的那些),或者扩展java.lang.RuntimeException - 不必捕获这些异常。另一个解决方案是查看Java API并找到描述您情况的适当异常:在这种特殊情况下,我认为最好的是IllegalArgumentException
。
答案 7 :(得分:1)
取决于,您可以抛出更一般的异常或更具体的异常。对于更简单的方法,更常见的例外就足够了。如果方法很复杂,那么抛出更具体的异常将是可靠的。