簡體   English   中英

澄清如何在Java中引發和捕獲自定義異常

[英]Clarification on how throwing and catching custom exceptions in Java

所以我有這個程序,它基本上是用Java重新創建SQL。 我有一個“驅動程序”類,可以控制整個事情。 它調用並實例化各種類和方法以使其全部起作用。 在這個我有這種方法

public void checkCommand(String input) {

for (Command c : commands) {
    if (c.matches(input)) {
        try {
            c.execute();
        } catch (MyException e) {
            System.out.println(e.getMessage());
        }
        return;
    }
}
System.out.println("That was not a valid command.");

Execute是一種在輸入的每個命令上都會調用的方法。 因此,每件事都會在某個時候經歷。 在DefineTableCommand類中,執行包含

database.addTable(tableName, fieldList);

數據庫是我用來存儲所有表的對象的單例實例。 addTable命令調用其他一些東西,依此類推。 在這些方法中,我有一些可能出錯的方法,例如表名已經存在或類似的東西。

public void addTable(String tableName, String fieldList) throws MyException {
    Table table;
    table = new Table(tableName, fieldList);
    if (instance.checkForDuplicates(tableName)) {
       throw new MyException(
            "There was a table with that name already present.");
    } else {
         instance.tableCollection.put(tableName, table);
    }
}

現在,我想發生的事情以及我想發生的事情是,將從addTable拋出異常,該異常將在堆棧中傳遞給checkCommand中的catch。 似乎並非如此,我不確定我理解為什么。

進一步解釋。 提示用戶輸入各種命令(例如,定義具有字段(名稱為varchar的字段)的表emp)的命令,如果他們的命令有問題,他們應該看到錯誤消息,但程序應繼續運行。 因此,可以說他們輸入了一個與已經存在的表同名的表,應該給他們一個錯誤消息,並且程序將繼續運行而沒有新表。 而是不會打印任何錯誤消息,但仍未添加該表。

確保execute()的簽名部分為:

    execute() throws MyException

並且在其實現中不會捕獲MyException,例如:

    //eg
    void execute() throws MyException
    {
      database.addTable(tableName, fieldList);
     //any code
    }

如果是這樣的話。

確保在Command類execute()方法引發MyException之前沒有捕獲它

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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