[英]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.