[英]How can I throw a general exception in 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;
}
}
}
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 中的一些通用異常類嗎?
您可以創建自己的 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;
}
}
好吧,有很多異常要拋出,但這里是拋出異常的方法:
throw new IllegalArgumentException("INVALID");
此外,是的,您可以創建自己的自定義例外。
關於異常的說明。 當您拋出異常(如上)並捕獲異常時:可以訪問您在異常中提供的String
拋出getMessage()
方法。
try{
methodThatThrowsException();
}catch(IllegalArgumentException e)
{
e.getMessage();
}
最簡單的方法是:
throw new java.lang.Exception();
但是,您的代碼中將無法訪問以下幾行。 所以,我們有兩種方法:
這實際上取決於您在捕獲該異常后想對它做什么。 如果您需要區分您的異常,那么您必須創建您的自定義Exception
。 否則你可以throw new Exception("message goes here");
Java 內置了大量針對不同場景的異常。
在這種情況下,您應該拋出一個IllegalArgumentException
,因為問題是調用者傳遞了一個錯誤的參數。
您可以定義自己的異常類,擴展 java.lang.Exception(用於已檢查的異常 - 這些必須被捕獲),或擴展 java.lang.RuntimeException - 這些異常不必被捕獲。
另一種解決方案是查看 Java API 並找到一個適當的異常來描述您的情況:在這種特殊情況下,我認為最好的方法是IllegalArgumentException
。
這取決於。 您可以拋出更一般的異常,或更具體的異常。 對於更簡單的方法,更一般的異常就足夠了。 如果方法很復雜,那么拋出更具體的異常將是可靠的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.