簡體   English   中英

在catch塊中處理異常?

[英]Handling exceptions in the catch block?

這可能是一個愚蠢的問題,但我在其他任何地方都找不到答案。 我有一個可以讀取和寫入文件以進行保存的類。 現在,我正在嘗試處理一些可能會出現的錯誤。 我想知道的是這是合法的還是Java的慣例:

try {
    in = new ObjectInputStream(new FileInputStream(fileName));
    score = (Score)in.readObject();
} catch() {
    ...
}

我遇到的問題是,如果文件為空,則無法讀取文件。 該程序將崩潰,因此我想知道常見或常規的做法是從catch語句在文件中創建一些數據,然后再次嘗試/捕獲它。 然后在第二個捕獲中,我可以使程序崩潰。

我要這樣做的原因是在用戶刪除文件中的數據的情況下。

如果合法,這是語法嗎?

try {
    // try something here
} catch(//Exception here) {
    // Create a new file and try again.
    try {
        // try again
    } catch() {
        // Crash the program
    }
}

在嘗試使用它之前,為什么不檢查文件是否不存在或為空?

try {
    File file = new File( fileName);
    if( !file.exists() || file.length() == 0) { 
        // Create the file, initialize it with some default value
    }
    in = new ObjectInputStream(new FileInputStream( file));
    score = (Score)in.readObject();
} catch() {
    ...
}

請注意,這是一個很小的爭用條件,在您檢查文件是否存在以及在FileInputStream實際使用它之間,用戶可以刪除該文件。

在catch塊中進行這樣的工作通常是不好的形式。 如果您想重試失敗,請使用類似以下的循環

int retryCount = 0;
boolean success = false;
while(!success && retryCount < 2) {
    retryCount++;
    try {
        ...
        success = true;
    } catch (Exception ex) {
        // log exception
    }
}

暫無
暫無

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

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