我可以在构造函数之前调用方法

时间:2012-02-15 12:44:53

标签: java

我知道我可以在构造函数中调用静态方法。

  1. 我在一个类中有一个构造函数,它通过this(arguments)调用另一个构造函数。

  2. 其次,第二个构造函数正在调用super(arguments)调用超级构造函数。

  3. 我想在这些构造函数执行之前执行一些代码。我不能使用static块。有什么想法吗?

5 个答案:

答案 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();
}