for - 尝试组合循环?

for - try combined loop?

使用一些遗留代码,遇到了这个:

    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();
        }

它可以编译并运行,但我不知道哪个循环在另一个循环中,也不知道它为什么起作用。

try-catch 不是一个循环,它只是一个执行 try 块(一次)和可能的 catch 块的结构。

如果你把它分解,这就是发生的事情:

  • 对于 files 数组中的每个索引 i
    • 做一件事,一个try-catch
      • try 块本身有一个 "anonymous block"(由 try 内的花括号创建的块——它从单词 [=11= 之后的第二个大括号开始])
        • 匿名块有一个语句,System.out.println("Do stuff");
      • catch 块打印异常的堆栈跟踪(当然,如果抛出异常)

这段代码

    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 允许你有一些 "extra" 括号,但它不会改变任何东西(如果你在其中声明变量,它会改变变量的范围,但事实并非如此)