关于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正确!



谢谢!