为什么我可以在java的for循环中创建很少的文件对象

为什么我可以在java的for循环中创建很少的文件对象,java,file,for-loop,file-io,Java,File,For Loop,File Io,在下面的代码中 我可以使f对象4次没有错误 for(i=0;i<3;i++){ File f2=new File("D:/"); } 为什么在lopp中,我们可以多次使用相同的名称和相同的构造函数创建文件对象,但在第二个脚本中,我们无法这样做?您的循环相当于以下代码: { // block 1 start File f2 = new File("D:/"); } // block 1 end { // block 2 start File f2 = new Fi

在下面的代码中 我可以使f对象4次没有错误

for(i=0;i<3;i++){
   File f2=new File("D:/"); 
}

为什么在lopp中,我们可以多次使用相同的名称和相同的构造函数创建文件对象,但在第二个脚本中,我们无法这样做?

您的循环相当于以下代码:

{ // block 1 start
    File f2 = new File("D:/");
} // block 1 end

{ // block 2 start
    File f2 = new File("D:/");
} // block 2 end

{ // block 3 start
    File f2 = new File("D:/");
} // block 3 end

每个f2变量仅限于其块,并且仅存在于其内部。但是,如果您尝试在一个块中声明一个变量两次,它将失败。

您的代码将覆盖先前迭代中的文件。这就是为什么第二个选项有效。

因为范围可变。在循环中,f2在每次迭代时消失。在循环之外,不能有两个同名的变量,但可以,但不在同一范围内,因此两个同名的局部变量不会像您所注意到的那样工作。请将引用变量重命名为f1。在第一种情况下,引用将重新签名。文件f=新文件:/;文件f1=新文件C:/;只是不要第二次声明变量。只需设置它:f2=新字段:/;
{ // block 1 start
    File f2 = new File("D:/");
} // block 1 end

{ // block 2 start
    File f2 = new File("D:/");
} // block 2 end

{ // block 3 start
    File f2 = new File("D:/");
} // block 3 end