我可以为任何方法抛出FileNotFoundException,还是仅用于main方法?

时间:2015-01-16 03:01:39

标签: java

我有一个程序,当用户按下GUI顶部的'x'时,假设使用File IO将信息保存到文件中,但是当我将throws FileNotFoundException放在main方法中时,它将无法编译而不会出错。

该部分的代码是:

public void windowClosing(WindowEvent e) {




File myFile = new java.io.File("GuidanceAppt.txt");
PrintWriter output = new PrintWriter(myFile);
for (int i=0;i!=1000;i++){
    output.println(studentNum[i] + " " + name[i] + " " + time + " " + counselor + " ");

}


}

我可以在顶部添加投掷吗?

public void windowClosing(WindowEvent e)throws FileNotFoundException {




File myFile = new java.io.File("GuidanceAppt.txt");
PrintWriter output = new PrintWriter(myFile);
for (int i=0;i!=1000;i++){
    output.println(studentNum[i] + " " + name[i] + " " + time + " " + counselor + " ");

}

}

3 个答案:

答案 0 :(得分:1)

你可以这样做但最终你必须处理异常。如果你不这样做,那么当它运行时它可能会不愉快地退出。

一种方法是用try and catch block包围。并告诉用户该文件不存在,或者创建它。

答案 1 :(得分:0)

如果您的班级实施WindowListener,您将无法在顶部添加throws FileNotFoundException,因为您的班级不会正确覆盖windowClosing方法。你需要做的是在可以引发FileNotFoundException的方法周围使用try-catch块:

try {
    File myFile = new java.io.File("GuidanceAppt.txt");
    PrintWriter output = new PrintWriter(myFile);
    for (int i=0;i!=1000;i++){
        output.println(studentNum[i] + " " + name[i] + " " + time + " " + counselor + " ");
} catch (FileNotFoundException ex) {
    ex.printStackTrace();
}

检查您是否正确覆盖方法的一个好方法是使用@Override注释,它位于方法之前:

@Override public void windowClosing(WindowEvent ev) 
    throws FileNotFoundException { // compilation error

@Override public void windowClosing(WindowEvent ev) {

答案 2 :(得分:0)

如果要覆盖超类中的方法(如WindowAdapter)或在接口中实现方法(如WindowListener),则覆盖只能声明抛出异常,超类/接口方法也是如此声明。

由于windowClosing中的WindowListener声明没有例外,您的覆盖也不允许声明任何例外。

覆盖或接口实现的方法可以抛出您想要的任何异常。