2013-10-10 55 views
0

嗨,我們可以在Java 7中同時使用資源和多重捕獲嗎?我試圖使用它,它給編譯錯誤。我可能會錯誤地使用它。請糾正我。我們可以在Java 7中同時使用資源和多重捕獲嗎?

try(GZIPInputStream gzip = new GZIPInputStream(new FileInputStream(f)); 
    BufferedReader br = new BufferedReader(new InputStreamReader(gzip)) 
    { 
     br.readLine(); 
    } 
    catch (FileNotFoundException | IOException e) { 
     e.printStackTrace(); 
    } 

在此先感謝。

回答

8

是的!你可以。

但是,您的問題在FileNotFoundExceptionIOException。因爲FileNotFoundExceptionIOException的子類,它是無效的。在catch塊中只使用IOException。 try語句中還有一個右括號)。那就是爲什麼,你有錯誤。

try(GZIPInputStream gzip = new GZIPInputStream(new FileInputStream(f)); 
    BufferedReader br = new BufferedReader(new InputStreamReader(gzip))) 
{ 
    br.readLine(); 
} 
catch (IOException e) { 
    e.printStackTrace(); 
} 
1

這是Java SE 7一塊從官方Oracle Documentation很可能:

新的語法允許聲明是在try塊的一部分資源。這意味着您可以提前定義資源,運行時會在執行try塊後自動關閉這些資源(如果它們尚未關閉)。

public static void main(String[] args) 
{ 
    try (BufferedReader reader = new BufferedReader(
    new InputStreamReader(
    new URL("http://www.yoursimpledate.server/").openStream()))) 
    { 
    String line = reader.readLine(); 
    SimpleDateFormat format = new SimpleDateFormat("MM/DD/YY"); 
    Date date = format.parse(line); 
    } catch (ParseException | IOException exception) { 
    // handle I/O problems. 
    } 
} 

@Masud中說得對FileNotFoundExceptionIOException一個子類,它們不能像使用

catch (FileNotFoundException | IOException e) { e.printStackTrace(); }

但你肯定可以做這樣的事情:

try{ 
    //call some methods that throw IOException's 
} 
catch (FileNotFoundException e){} 
catch (IOException e){} 

這是一個非常有用的Java提示:When捕捉異常,不要把你的網絡太寬

希望它有幫助。 :)

相關問題