2015-03-02 48 views
0

一些遺留代碼一起工作,並且遇到此:- 嘗試組合循環?

File file = new File() 
    File[] files = file.listFiles(); 
    for(int i=0;i<files.length;i++) 
     try { 
      { 
       System.out.println("Do stuff"); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

它編譯和運行,但我不知道哪個循環是其他內,或者爲什麼它的工作原理。

+1

我只看到一個循環...你能指出你認爲第二個是哪裏嗎? – 2015-03-02 21:09:16

+1

有些東西告訴我'File file = new File()'不能編譯,至少有兩個原因... – Pshemo 2015-03-02 21:10:06

回答

2

此代碼

File file = new File(); 
    File[] files = file.listFiles(); 
    for (int i = 0; i < files.length; i++) 
     try { 
      { 
       System.out.println("Do stuff"); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

是相同的,因爲這一個

File file = new File(); 
    File[] files = file.listFiles(); 
    for (int i = 0; i < files.length; i++) { 
     try { 
      { 
       System.out.println("Do stuff"); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

而且同這個

File file = new File(); 
    File[] files = file.listFiles(); 
    for (int i = 0; i < files.length; i++) { 
     try { 
      System.out.println("Do stuff"); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

Java允許你有一些「額外」的括號,但它不會改變任何東西(當然它改變如果你在裏面聲明變量的範圍,但事實並非如此)

1

try-catch不是一個循環,它只是一個執行try塊(一次)和可能的catch塊的構造。

如果你打破它,這裏發生了什麼事:

    files陣列
    • 每個索引i做一兩件事,一個try-catch
      • try塊本身具有一個"anonymous block"(由try內的捲髮創建的塊 - 它從第二個花括號開始字try
        • 匿名塊有一個說法,System.out.println("Do stuff");
      • catch版畫異常的堆棧跟蹤(如果有異常拋出,當然)