以下选项中正确的是() 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正确!
-
提问者评价
-
谢谢!
-
本文讨论了Java构造方法的问题,分析了选项B和D的正确性,通过实例代码展示了构造方法的执行过程,并解释了为什么选项B是正确的。

被折叠的 条评论
为什么被折叠?



