2016-02-03 115 views
0

是否有可能在拋出異常的方法之外捕獲異常?異常句柄

對於例如:

public double[] readFile(String filename) throws IOException 
    { 
    File inFile = new File(filename); 
    Scanner in = new Scanner(inFile); 
    try 
    { 
     readData(in); 
     return data; 
    } 
    finally 
    { 
     in.close(); 
    } 
} 

我怎麼會去在main方法捕捉IOException異常? 我可以只做catch(IOException){}嗎?

+4

當然,如果該方法沒有按」 t自己捕獲異常,它傳播給調用者。 – Berger

+0

或者你可以「捕捉」它,然後重新拋出它(在catch塊中),這樣調用者就可以獲得它。但**從來沒有**讓你的catch塊爲空:) – Shark

+0

你如何重新拋出異常?它是一樣的只是拋出它,但在捕獲? –

回答

1

是土特產品可以做,趕上在someMethod()方法扔這樣的例外:

public double[] readFile(String filename) throws IOException 
    { 
    ... 
    } 

在另一種方法例如:

public void someMethod(){ 
    try 
    { 
    readFile(in); 
    return data; 
    }catch(IOException io){ 
    } 
    ... 
    } 
1

你並不需要使用try/catch聲明這個方法,因爲你不想在裏面處理異常,所以你希望它被拋出。 (這是throws關鍵字做什麼)

所以,你可以這樣做:

public double[] readFile(String filename) throws IOException 
{ 
    File inFile = new File(filename); 
    Scanner in = new Scanner(inFile); 

    readData(in); 
    // If everything goes normally, the execution flow shall pass on to 
    // the next statements, otherwise if an IOException is thrown, it shall 
    // be handled by the caller method (main) 

    in.close(); 
    return data; 
} 

&您main方法中,處理可能的異常:

try { 
    double[] result = readFile("filename.ext"); 
    // ... 
} 
catch(IOException e) { 
    // Handle the exception 
} 
+1

好多了,那就是我一直在尋找的東西! –