题目描述
写一个查找某个文件夹中,java文件的个数的方法中,使用了递归.但是我有一个疑问,请看代码.
之前我完成这个需求,是中方法外定义一个变量初始值为0,看了别人的代码才发现下面这样写才是正确的,但是玩不明白,为什么方法里面的变量,再每次递归的时候都已经重新归0了,最好还能得到正确结果.求教大佬,帮我解答.
相关代码
public static void main(String[] args) {
File file = new File("day_08");
System.out.println(method(file));
}
public static int method(File file) {
int num = 0;
System.out.println("...每次递归都会执行num=0,为什么结果还是正确的?...");
File[] files = file.listFiles();
for (File f : files) {
if (f.isDirectory()) {
num += method(f);
}
if (f.toString().endsWith(".java")) {
num++;
System.out.println(f);
}
}
return num;
}
输出结果
...每次递归都会执行num=0,为什么结果还是正确的?...
...每次递归都会执行num=0,为什么结果还是正确的?...
...每次递归都会执行num=0,为什么结果还是正确的?...
...每次递归都会执行num=0,为什么结果还是正确的?...
day_08\src\demo1\Demo.java
...每次递归都会执行num=0,为什么结果还是正确的?...
day_08\src\demo1\demo1_1\Demo.java
day_08\src\demo1\demo1_1\ThreadDemo.java
day_08\src\demo1\demo1_1\Thread_1.java
day_08\src\demo1\demo1_1\Thread_2.java
day_08\src\demo1\demo1_1\Thread_3.java
day_08\src\demo1\ThreadDemo.java
...每次递归都会执行num=0,为什么结果还是正确的?...
day_08\src\demo2\FileDemo.java
day_08\src\demo2\FileDemo2.java
...每次递归都会执行num=0,为什么结果还是正确的?...
day_08\src\demo3\DiGUiDemo.java
day_08\src\demo3\DiGuiDemo2.java
day_08\src\demo3\DiGuiDemo3.java
...每次递归都会执行num=0,为什么结果还是正确的?...
day_08\src\demo4\demo.java
day_08\src\demo4\demo2.java
14
因为num是局部变量... 每次递归的都不是同一个num。