我知道我可以在构造函数内调用静态方法。我可以在构造函数之前调用方法
我有一个类,它是通过调用
this(arguments)
另一个构造一个构造器。其次是第二个构造呼吁
super(arguments)
调用超级构造函数。
我想在执行这些构造函数之前执行一些代码。我不能使用static
块。有任何想法吗?
我知道我可以在构造函数内调用静态方法。我可以在构造函数之前调用方法
我有一个类,它是通过调用this(arguments)
另一个构造一个构造器。
其次是第二个构造呼吁super(arguments)
调用超级构造函数。
我想在执行这些构造函数之前执行一些代码。我不能使用static
块。有任何想法吗?
你可以调用静态方法。我经常这样做:
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";
}
}
当然,我们不能调用实例方法或使用非静态字段。
(当然,这种模式需要在超级一个构造函数参数)
Thanks.But在你的代码中使用超(转换(ARG));.中超将搜索超metho.My方法在该基类中。 – 2012-02-15 13:01:45
用'this(..)'替换'super(..)' - 它没有区别。静态方法在任何其他构造函数之前调用。 – 2012-02-15 13:03:53
再次感谢您,但您可以在我的问题中看到。一个costructor有这个,另一个构造函数已经超级了。我不能使用2个this或者2个super.Right? – 2012-02-15 13:07:26
的super()
调用必须是在构造函数中的第一条语句,除了那些你已经提到你不能使用静也不例外。
即使你没有明确写在你的构造函数的开始super()
呼叫时,编译器把它放在你的。它永远在那里!
最好的办法是重构你的代码,所以你不需要在super()
调用之前调用任何东西,但是没有看到代码(或者至少有更多背景),没有人可以告诉你如何最好做到这一点!
在super()调用返回后,初始化器运行,所以不太可能有帮助。 – 2012-02-15 14:13:40
你不能 - 的第一件事,Java需要一个super.constructer电话 - 写还是不行!
使用工厂模式,所以你可以这样做:
public static MyObject newInstance() {
staticMethod();
return new MyObject();
}
假设是不应该静态方法来真正改变构造函数的行为,在执行构造函数之前,将字面上调用它。
我的函数只需要一个参数进入构造函数,因为它是参数。 – 2012-02-15 13:08:49
没有静态方法可以根据问题是使用,所以我认为@ berry120重构的想法可能更加得心应手 – Necronet 2012-02-15 13:09:48
你可以这样做,也没有一个静态块:
public Main() {
System.out.println("Inside Constructor");
}
{
System.out.println("Before Constructor");
}
public void doTest() {
this.doTest();
}
在回复之前先了解一下。 – 2012-02-15 13:07:44
你从哪里调用构造函数?你不能在调用构造函数之前执行代码吗? – 2012-02-15 12:47:09
使用非静态块。 – 2012-02-15 12:47:25
这不是静态块。超级或替代构造函数调用必须是第一个语句。 – Nishant 2012-02-15 12:47:35