【发布时间】:2012-12-28 06:01:42
【问题描述】:
这是我的代码。
这是我的 PrintToFile 类
import java.util.*;
import java.io.*;
public class PrintToFile{
File f;
FileWriter fw;
PrintWriter pw;
public void PrintToFile()throws Exception{//remove void from constructor
File f = new File ("Output.txt");//dont reinitialize
FileWriter fw = new FileWriter(f, true);//dont reinitialize
PrintWriter pw = new PrintWriter(fw);//dont reinitialize
}
public void printExp(ArrayList<Expense> expList){
for(int i = 0; i < expList.size(); i++){
pw.println("---------------------------------------");//exception here
pw.println(expList.get(i));
}
pw.close();
}
}
在我的主课中,我调用打印我的 ArrayList
PrintToFile printer = new PrintToFile();
printer.printExp(expList);
我已将 expList 定义为对象的 ArrayList
我得到的例外是
Exception in thread "main" java.lang.NullPointerException
发生在标记的地方。我的问题是导致此异常的原因是什么?谢谢
【问题讨论】:
-
谢谢大家!不确定是否反对?但是感谢所有答案,它现在可以完美运行
-
+1 也许有人在抱怨你的缩进风格;)
-
您现在可能已经意识到,每当您“声明”一个变量(将数据类型 - 例如文件 - 放在变量前面)时,它都会创建一个新变量。因此,您有 2 个名为“f”的 File 类型的变量。当一个变量被声明时,它的范围被限制在它的大括号内。当括号退出时,变量超出范围。当变量名发生冲突时,最小的作用域获胜。因此,您在 PrintToFile() 构造函数中的“文件 f”掩盖了“文件 f”类变量。
标签: java class file-io printwriter