关于Java构造方法的一个问题
以下选项中正确的是()A、一个class只能定义一个constructorB、constructor必须与class同名,但普通方法不能与class同名C、class中c...
以下选项中正确的是()
A、 一个class只能定义一个constructor
B、 constructor 必须与class同名,但普通方法不能与class同名
C、 class中constructor不可省略
D、 construtcor只会在一个对象被new时执行
我觉得B和D都正确,但标准答案是B,请问各位高手怎么看! 展开
A、 一个class只能定义一个constructor
B、 constructor 必须与class同名,但普通方法不能与class同名
C、 class中constructor不可省略
D、 construtcor只会在一个对象被new时执行
我觉得B和D都正确,但标准答案是B,请问各位高手怎么看! 展开
6个回答
展开全部
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 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正确!
展开全部
构造函数是一个类中的特殊的函数,构造函数用于在生成对象时的初始化。普通的方法在类中按照顺序去执行,而构造函数在使用new运算符创建对象时才会自动调用。
在继承的相关概念中,子类继承父类。在生成子类对象的同时,会形成如下初始化的优先级。
1.生成子类,首先调用父类
2.在类中,首先初始化属性,后初始化构造方法(属性在类中,在方法中叫变量)
父类属性-->父类构造方法-->子类属性-->子类构造方法
在子类的构造方法中,会默认的调用父类构造方法,有隐形的super()方法;因此,如果父类中如果没有无参构造方法,就会报错
在继承的相关概念中,子类继承父类。在生成子类对象的同时,会形成如下初始化的优先级。
1.生成子类,首先调用父类
2.在类中,首先初始化属性,后初始化构造方法(属性在类中,在方法中叫变量)
父类属性-->父类构造方法-->子类属性-->子类构造方法
在子类的构造方法中,会默认的调用父类构造方法,有隐形的super()方法;因此,如果父类中如果没有无参构造方法,就会报错
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我觉得D是正确的, 不管是怎么用,只要NEW一个类, 管你写没写构造方法,都有默认的空构造方法.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我觉得也是,创建一个对象的时候,默认就会创建一个空的 construtcor 。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
B 一个Class 中可以有多个构造函数 (不同的参数) 构造函数名必须和类名相同
一个类也可以没有构造函数
一个类也可以没有构造函数
追问
那么D答案,在对象new的时候,他的构造方法都会执行是吧;
如果有显示的构造方法,执行;没有显示的构造方法,背后其实也会执行,是吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询