【发布时间】:2011-08-04 13:51:07
【问题描述】:
考虑这个简单的程序。该程序有两个文件:
文件 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 中的一些通用异常类?
【问题讨论】:
-
您可能会考虑根本不抛出异常,而只是将速度设置为零/最大值。为什么要惩罚不知道确切汽车行驶速度的呼叫者以停止/加速它?
-
考虑将
speedDown重命名为slowDown。 -
@dlev:同意,但这是代码设计的问题。您提出的行为符合正常汽车行为:加速到极限最高速度并减速到完全停止。
-
来自 C# 背景,我和 Richard 有同样的问题,到目前为止似乎没有一个回答能明确回答。在 C# 中,您不必从 Exception 派生新类。您可以简单地“抛出新异常(消息);”例如,并在将捕获异常的块中对其进行一般处理。我仍在开发我的第一个 Java 应用程序 :-) 但从文档中的内容来看,Java 在异常方面几乎相同。