我是Java编程的新手,我不知道如何理解引用和垃圾收集器的工作方式,但我需要一些建议。
如果(例如),我需要从文件中读取,并且我使用循环来遍历每个文件并从中读取文本,我应该避免做类似的事情:
(br是BufferedReader的一个实例)
br = new BufferedReader(new FileReader("filePath"));
所以基本上,每次循环时, br 都会引用BufferedReader的新对象。这是错误的做法吗?如果是,我该怎么做才能让它更有效地工作?
提前感谢您提供的任何帮助。
完整代码:
public int kerko(String folderName, String wantedWord) throws IOException{
File file = new File(folderName);
int count = 0;
if(file.isDirectory()){
File[] files = file.listFiles();
for(File f: files){
if(f.isFile() && f.getName().endsWith(".txt")){
br = new BufferedReader(new FileReader(f.getAbsolutePath()));
String line = br.readLine();
while(line != null){
if(line.toLowerCase().contains(wantedWord)){
count++;
}
line = br.readLine();
}
br.close();
}
count += kerko(f.getAbsolutePath(), wantedWord);
}
}
return count;
}
答案 0 :(得分:1)
以这种方式实例化BufferedReader和FileReader是可以的。
离开{ }
块后,这些对象将无法访问,之后GC将收集它们。
答案 1 :(得分:1)
将多个对象一个接一个地分配给同一个变量是绝对正确的。垃圾收集器知道哪些对象不再被引用。
我对垃圾收集的一般建议:除非你做一些非常先进的东西,否则不要考虑它。这就是垃圾收集器的用途。