我知道我可以在构造函数中调用静态方法。
我在一个类中有一个构造函数,它通过this(arguments)
调用另一个构造函数。
其次,第二个构造函数正在调用super(arguments)
调用超级构造函数。
我想在这些构造函数执行之前执行一些代码。我不能使用static
块。有什么想法吗?
答案 0 :(得分:4)
您可以调用静态方法。我经常这样做:
public class MyClass extends SuperDuperClass {
public MyClass() {
this(convert("Foo!")); // convert will be executed
// other constructor is called
}
public MyClass(String arg) {
super(convert(arg)); // convert will be executed
// before superconstructor is called
}
private static String convert(String arg) {
return arg + "_modified";
}
}
当然,我们不能调用实例方法或使用非静态字段。
(当然,这种模式需要在super上使用参数的构造函数)
答案 1 :(得分:3)
super()
调用必须是构造函数中的第一个语句,除了您已经提到过的不能使用的静态之外没有例外。
即使您没有在构造函数的开头显式编写super()
调用,编译器也会为您编写代码。它总是在那里!
你最好的选择是重构你的代码,这样你就不需要在super()
调用之前调用任何东西,但是没有看到代码(或者至少有更多的背景)没有人可以告诉你你怎么做到最好!
答案 2 :(得分:1)
你不能 - java需要的第一件事是超级构造函数调用 - 是否写入!
答案 3 :(得分:1)
使用工厂模式,您可以这样做:
public static MyObject newInstance() {
staticMethod();
return new MyObject();
}
假设静态方法不应该实际改变构造函数的行为方式,那么在构造函数执行之前就会调用它。
答案 4 :(得分:1)
你可以这样做,也没有静态阻止:
public Main() {
System.out.println("Inside Constructor");
}
{
System.out.println("Before Constructor");
}
public void doTest() {
this.doTest();
}