簡體   English   中英

如何在 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 中的一些通用異常類嗎?

您可以創建自己的 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();

但是,您的代碼中將無法訪問以下幾行。 所以,我們有兩種方法:


  1. 在方法的底部拋出一個通用異常。
  2. 如果您不想執行 1,則拋出自定義異常。

這實際上取決於您在捕獲該異常后想對它做什么。 如果您需要區分您的異常,那么您必須創建您的自定義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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM