我正在尝试创建一个扩展java.io.PrintWriter
的类。因为PrintWriter
没有无参数构造函数,所以我创建了一个,使用super()
来调用父构造函数,并将路径作为参数。
public class PlotWriter extends PrintWriter {
PlotWriter(String path) {
try {
super(path);
} catch (FileNotFoundException ex) {
//Exeption Handled
}
}
}
编译器需要围绕super()
进行异常处理。
但与此同时,它抱怨道:
Error:(14, 18) java: call to super must be first statement in constructor
我该如何解决这个问题?
答案 0 :(得分:3)
你可以这样写:
public class PlotWriter extends PrintWriter {
PlotWriter(String path) throws FileNotFoundException {
super(path);
}
}
异常应该由调用者处理,他们不打算在构造函数中处理。
public void someWhere() {
try {
PlotWriter pw = new PlotWriter(".../path/file");
} catch (FileNotFoundException ex) {
// handle exception here
}
}
此外,构造函数中的第一个语句应始终为super(...);
或this(...);
(如果您未指定任何此类调用,则会隐式调用super();
)并且它们甚至不能两个人在一起。