2014-04-29 19 views
-1

這裏是我的代碼:我得到一個錯誤:「異常FileNotFoundException異常在相應try語句的身體從來沒有拋出」,不能弄清楚爲什麼

import java.util.Scanner; 
import java.io.*; 

public class Warning 
{ 
    public static void main (String[] args)throws IOException 

{ 
    int creditHrs;   
    double qualityPts;  
    double gpa;    
    String name; 

    // Set up scanner to input file 
    Scanner inFile = new Scanner(new File("c:\\students.dat")); 

    System.out.println ("\n Students on Academic Warning\n"); 

    // Process the input file, one token at a time 

    try 
    { 
    while (inFile.hasNext()) 
    { 
     // Get the credit hours and quality points and 
     // determine if the student is on warning. If so, 
     // display the student's name. 
      name = inFile.next(); 
      creditHrs = Integer.parseInt(inFile.next()); 
      qualityPts = Double.parseDouble(inFile.next()); 

      gpa = qualityPts/creditHrs; 
      if(gpa < 2.0) 
      { 
       System.out.println(name); 
      } 



     } 
    } 

     //insert catch statements 
     catch(FileNotFoundException e) 
     { 

     } 

    catch(NumberFormatException e) 
    { 

    } 
    inFile.close(); 
    } 
} 

的錯誤是:錯誤:異常FileNotFoundException異常是永遠扔在相應的試語句中 爲什麼我得到這個?我認爲它不會拋出異常是一件好事,爲什麼它必須告訴我,你知道嗎?我真的不明白這

+0

[異常從不會在相應的try語句的主體中拋出]可能的重複(http://stackoverflow.com/questions/22613423/exception-is-never-thrown-in-body-of-corresponding-try-statement ) – andersschuller

+0

當您嘗試打開文件並且找不到文件時,會發生'FileNotFoundException'。在嘗試打開文件的'try'塊中沒有任何內容,只有讀取文件的代碼。要麼你在捕捉錯誤的異常,要麼在你的'try'塊上面有一些文件打開語句,這些語句可能應該被移除。或者'catch(FileNotFoundException e)'塊從其他程序中跳入。 – ajb

回答

0

你得到這個錯誤,因爲在try聲明中,你沒有調用任何方法,甚至可能拋出這個錯誤,只要編譯器可以告訴。

由於方法必須聲明它們拋出的異常,所以這個錯誤告訴你,你正試圖捕獲一個永遠不會發生的異常,這是一個編碼錯誤。

也許你有這種方法的以前版本,可能會引發此錯誤?如果是這樣,也許這是因爲你已經改變了方法,所以它不再可能?這只是我的一個猜測,但是您發佈的代碼示例不會嘗試打開任何新文件(在try語句的開頭之前完成),因此它不會發生在try

-1

你會得到這個錯誤,因爲FileNotFoundExeption永遠不會被try塊內的代碼塊拋出。嘗試將FileNotFoundException更改爲try塊內部的代碼段拋出的一些其他異常,或者只捕獲Generic excepton(異常)。

+0

可以拋出哪些異常類型是確定性的 - 它們是在方法簽名上聲明的 - 沒有理由嘗試其他類型,或者捕獲一般的Exception類。捕獲FileNotFound應該在方法的前面包裝文件的開頭,如果它需要被捕獲,或者如果這個方法應該拋出異常給調用者,那麼catch應該被移除並且異常被聲明爲拋出在方法簽名中。 – jefflunt

+0

@jefflunt我的意思是捕捉try內部的一段代碼可以拋出的異常,我並不強迫OP僅僅爲了處理異常,而是選擇操作的異常是否需要在函數內部處理或傳播給調用者。 – Kakarot

相關問題