java 局部变量与全局变量问题

java 局部变量与全局变量问题

问题描述:

图片说明
整个代码求的是一个文件夹的大小 (文件夹里可能还有文件夹) 用的递归

问题1:原代码是书上例子 结果正确
红色标出的是我自己重写遇到的 结果是很大的负数
按我的理解 size 在方法里面是局部变量 作用整个方法
在外面是类变量 作用整个类
但是在这段代码中应该没什么不同吧,因为我只有一个方法,SIZE意思是固定的
问题2:
第14行的 files != null && 能不能省掉?

代码如下:
import java.io.File;
import java.util.Scanner;
public class Directory{
public static void main(String []args){
System.out.println("Enter a directory of file ") ;
Scanner input = new Scanner (System.in);
String directory = input.nextLine();
System.out.println(getSize(new File(directory)) + "bytes");
}
public static long getSize(File file ){
long size = 0;
if (file.isDirectory()){
File[]files = file.listFiles();
for (int i =0;files != null && i<files.length; i++)
size+=getSize(files[i]);
}
else
size +=file.length();
return size;
}
}

1.首先,size这里的含义是每个目录的大小,这个getSize()方法返回的就是每个目录的大小,显然是每个目录一个变量是正确的,使用全局的变量

实际上加了好多遍。自己想想,应该不难想明白。
2.不能省略null的判断,省略了以后,如果是空目录就会抛出空指针异常。

第一个要是用全局变量,由于你要使用到递归,假设不适用全局变量的话,在每一个递归的函数中都有一个size,每个值都是不同的所以必须使用全局的变量
第二个问题。省略也应该没问题

哥们,你这代码,编译都过不了吧,方法可以定义static变量吗?