关于Java构造方法的一个问题
以下选项中正确的是() A、 一个class只能定义一个constructor B、 constructor 必须与class同名,但普通方法不能与class同名 C、 class中constructor不可省略 D、 construtcor只会在一个对象被new时执行 我觉得B和D都正确,但标准答案是B,请问各位高手怎么看!
分享到:
2013-03-28 01:41
提问者采纳
D不正确是因为构造函数不只是在对象NEW的时候被执行,你也可以在其它重载构造函数内执行,所以D不正确。 例如:
public class test {
public test() {
//这是一个空参构造方法
}
public test(String str) {
//这是一个有参构造方法,在这个方法内调用了上面的空参构造方法。
this();
}
}
但是最让我疑惑的不是这个,而是B,
为什么B是对的呢?很明显这个是错误的答案,不知道是谁给你出的题,但你可以告诉他,这题他出错了。。。
下面程序已经编译通过,里面的public void test()方法就是个普通方法,但可以和类重名不是:
public class test {
public test() {
//这是一个空参构造方法
System.out.println("空参构造方法");
}
public test(String str) {
//这是一个有参构造方法,在这个方法内调用了上面的空参构造方法。
this();
System.out.println("执行this()后,调用了有参构造方法。输出参数:"+str);
}
public void test(){
System.out.println("普通方法");
}
public static void main(String[] args) {
test t=new test();
t.test();
test t1=new test("我");
}
}
程序输出结果:
空参构造方法
普通方法
空参构造方法
执行this()后,调用了有参构造方法。输出参数:我
追问
一、谢谢你的解答,这个方法: public void test(){ System.out.println("普通方法"); } 证明了B答案是错的;那么再来看D答案,你new一个对象的时候: 如果你说有参构造里面能执行无参构造;那么有参构造也只有在new对象时才会执行吧,所以你说:“构造函数不只是在对象NEW的时候被执行,你也可以在其它重载构造函数内执行”,这样的说法很牵强其实!所以D正确!
谢谢!