黑马程序员技术交流社区
标题:
构造器调用的问题
[打印本页]
作者:
菜不鸟
时间:
2013-11-26 23:40
标题:
构造器调用的问题
如果调用类的一个构造器创建对象时 该构造器中调用了另一个构造器 那此时会创建一个对象还是两个对象?
作者:
石头6004
时间:
2013-11-27 05:37
本帖最后由 石头6004 于 2013-11-27 05:38 编辑
一个对象!
我测试了一下:
package cn.itcast;
public class Test {
public Test() {
this(0);
System.out.println(this.hashCode());
}
public Test(int i) {
System.out.println(this.hashCode());
}
public static void main(String[] args) {
new Test();
}
}
复制代码
调用构造器,最终是返回对象的实例,外部可以访问,如果创建两个的话,返回的实例是1,还是2呢,貌似没有意义。最终只需要一个对象,即:new 了一次就创建了一个对象。
再说如果创建了两个但是只有一个有对象句柄,即可达,另一个则会不可达,这样后者就会成为垃圾资源,被垃圾回收。
构造器作用:
1.创建java对象的重要途径.
2.对系统产生的对象初始化
3.并将该对象作为返回值返回,是外部程序可以访问
作者:
乔_博_文
时间:
2013-11-27 09:15
这个问题很好解决,你就想一个类继承另一个类,那么子类中的构造器中默认省略了super();这一行代码,这条代码代表什么?代表了它调用了父类的构造器。但是当我们new一个子类对象的时候,是new出了一个子类对象和一个父类对象吗?显然不是的。代码证明如下:
public class Father
{
String name;
int age;
public Father(){}//无参构造器(系统默认)
public Father(String name, int age)//有参构造器
{
this.name = name;
this.age = age;
}
}
public class Son extends Father {
String school;
public Son()
{
super();//这行代码不写的话,系统会默认加上并且隐藏的。它调用了父类构造器。
}
public Son(String name, int age, String school)
{
super.name = name;
super.age = age;
this.school = school;
}
}
public class NewTest
{
public static void main(String[] args)
{
Son Jim = new Son();//new 一个子类,很明显子类构造器中调用了父类构造方法,所以只是创建了一个子类对象。
}
}
复制代码
作者:
菜不鸟
时间:
2013-11-27 23:31
感谢大神
作者:
菜不鸟
时间:
2013-11-28 20:44
谢谢了,很明了
作者:
L_t
时间:
2013-12-1 19:46
谢谢楼主
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2