关于Java构造方法的一个问题

以下选项中正确的是()
A、 一个class只能定义一个constructor
B、 constructor 必须与class同名,但普通方法不能与class同名
C、 class中constructor不可省略
D、 construtcor只会在一个对象被new时执行
我觉得B和D都正确,但标准答案是B,请问各位高手怎么看!

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

温馨提示:内容为网友见解,仅供参考
第1个回答  2018-08-03
构造函数是一个类中的特殊的函数,构造函数用于在生成对象时的初始化。普通的方法在类中按照顺序去执行,而构造函数在使用new运算符创建对象时才会自动调用。
在继承的相关概念中,子类继承父类。在生成子类对象的同时,会形成如下初始化的优先级。
1.生成子类,首先调用父类
2.在类中,首先初始化属性,后初始化构造方法(属性在类中,在方法中叫变量)
父类属性-->父类构造方法-->子类属性-->子类构造方法
在子类的构造方法中,会默认的调用父类构造方法,有隐形的super()方法;因此,如果父类中如果没有无参构造方法,就会报错本回答被网友采纳
第2个回答  2013-03-28
我觉得D是正确的, 不管是怎么用,只要NEW一个类, 管你写没写构造方法,都有默认的空构造方法.
第3个回答  2013-03-27
我觉得也是,创建一个对象的时候,默认就会创建一个空的 construtcor 。
第4个回答  2013-03-28
B 一个Class 中可以有多个构造函数 (不同的参数) 构造函数名必须和类名相同
一个类也可以没有构造函数追问

那么D答案,在对象new的时候,他的构造方法都会执行是吧;
如果有显示的构造方法,执行;没有显示的构造方法,背后其实也会执行,是吧

关于Java构造方法的一个问题
public test() { \/\/这是一个空参构造方法 System.out.println("空参构造方法");} public test(String str) { \/\/这是一个有参构造方法,在这个方法内调用了上面的空参构造方法。this();System.out.println("执行this()后,调用了有参构造方法。输出参数:"+str);} public void test(){ Syst...

java面向对象中,构造方法要注意哪些方面?
1.构造方法不能被子类继承,但可以被子类调用,可以重载(同一个类)。2.方法名与类名相同 3.不能声明返回类型 4.不能被static、final、synchronized、abstarct修饰,不能有return语句返回值 5.有3种构造方法,分别为隐式无惨(默认构造方法)、显示无参、显示有参构造方法。6.如果在类中自己编写了...

java进行构造方法的时候,为什么一定要有一个无参构造方法?
1.子类继承父类的时候会自动继承父类的默认构造函数(也就是继承那个无参数的构造函数)。2.无参构造函数是所有构成函数的父类,如果没有写那个默认的不带参数的构造函数的话,继承的时候子类就会报错,因为系统不知道要不继承哪个构造函数,必须明确的使用super()关键字来描述。所以一般为了避免这种错误...

java中关于构造器构造函数构造方法重载方法的困惑
构造函数可以说就是一个构造器.是用来初始对象用的.你上面说的show(x,y)和show()如果返回值一样就可以说是一个方法重载.举个例子来说下重载吧.比如说你要将一个字符串和一个整形的数据加起来形成一个字符串.(假设+号默认只能连接两个字符串).这时你就要对+号声明方法:public String +(String s...

java的小问题 为什么执行的 时候 构造方法没有执行
构造方法是new对象时调用的,比如 T t=new T(),其中T()就是类T的构造方法。所以你这段程序中构造方法没用。

构造方法何时被调用?
问题一:Java中构造方法何时被调用 新建一个对象时被调用。也就是new的时候; 如: public class A{ int i; String c; public A(){ } 无参构造方法 public A(int i,String c) { this.i = i; this.c = c; }两参构造方法 public static void main(String[] args){ A a = new...

JAVA构造方法
构造方法不能作用是完成对象的初始化工作,他能够把定义对象时的参数传递给对象的域。构造方法不能由编程人员调用,而要系统调用。构造方法可以重载,以参数的个数,类型,或排序顺序区分。例子:1;单个构造函数方法;’2;多个构造函数方法 (例子为;带参数与不带参数)3;关于继承类的构造方法的调用...

java构造函数初始化的问题
1.首先明白构造函数的定义,如下:java 构造函数 一般我们讲的“函数”就是“方法”;构造函数=构造方法;构造方法是一种特殊的方法,具有以下特点。(1)构造方法的方法名必须与类名相同。(2)构造方法没有返回类型,也不能定义为void,在方法名前面不声明方法类型。(3)构造方法的主要作用是完成对象...

如何定义一个构造方法
问题一:java类的构造方法是什么? 与类名相同 可以有参数或者无参数 返回该类的对象 作用是用来构建和初始化该类的对象 调用无参构造器构建的对象只有该类的属性 比如 构建一个“Person” 这个对象 只能说这个对象有 eyes mouth age 等属性 调用有参构造器构建的对象可以在构建对象的时候对某些属性...

关于java编程的问题:一个类调用另一个类中构造方法中所定义的参数。
关于Java中构造方法的问题 可以,一般都用,单例用private java中一个类想调用另一个类中定义的面板怎么调用 将主面板传递给一个类,在这个类中将主面板上的将你想要的面板一层一层剥下来,并获得它,然后在你想要的面板上做操作。注意:主面板上放的是一个ponent数组 在类中的构造方法修改一变量,...

相似回答