簡體   English   中英

為什么捕獲異常后我的Java程序退出?

[英]Why does my Java program exit after an exception is caught?

我試圖弄清楚即使捕獲到異常后如何繼續執行代碼。 想象一下,我有一個充滿數字的文本文件。 我希望我的程序讀取所有這些數字。 現在,假設其中混有一個字母,是否有可能捕獲到異常,然后代碼繼續循環? 我是否需要在do-while循環中進行Try和catch? 請向我提供您的想法,我們將不勝感激。 我提供了我的代碼以防萬一:

NewClass newInput = new NewClass();
    infile2 = new File("GironEvent.dat");
    try(Scanner fin = new Scanner (infile2)){
        /** defines new variable linked to .dat file */
         while(fin.hasNext())
         {
             /** inputs first string in line of file to variable inType */
             inType2 = fin.next().charAt(0);
             /** inputs first int in line of file to variable inAmount */
             inAmount2 = fin.nextDouble();

             /** calls instance method with two parameters */
             newInput.donations(inType2, inAmount2);
             /** count ticket increases */
             count+=1;
         }
         fin.close();
     }
    catch (IllegalArgumentException ex) {
                 /** prints out error if exception is caught*/
                 System.out.println("Just caught an illegal argument exception. ");
                 return;
             }
    catch (FileNotFoundException e){
        /** Outputs error if file cannot be opened. */
        System.out.println("Failed to open file " + infile2  );
        return;

    }

在循環中聲明try-catch塊,以便在異常情況下該循環可以繼續進行。

在您的代碼中,如果下一個標記不能轉換為有效的double值,則Scanner.nextDouble將引發InputMismatchException 那就是您想在循環中捕獲的異常。

是的,盡管我認為您需要刪除return語句,但是我會將try / catch放入while循環中。

是的。 這些家伙說對了。 如果將try-catch放入循環中,則異常將保留在循環“內部”。 但是,現在的處理方式是,當引發異常時,該異常將“跳出”循環並繼續進行,直到到達try / catch塊為止。 像這樣:

    try                   while  
     ^
     |
   while          vs       try
     ^                      ^
     |                      |
Exception thrown       Exception thrown

在您的情況下,您需要兩個 try / catch塊:一個用於打開文件(在循環外),另一個用於讀取文件(在循環內)。

如果要在捕獲異常后繼續:

  1. 遇到異常時刪除return語句。

  2. 在您的while循環內部和外部捕獲所有可能的異常,因為您當前的catch塊僅捕獲2個異常。 查看Scanner API可能出現的異常。

  3. 如果要在任何類型的異常之后繼續執行,請捕獲另一個通用Exception。 如果要在通用Exception的情況下退出,則可以通過捕獲它來返回return。

暫無
暫無

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

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