黑马程序员技术交流社区

标题: 构造器调用的问题 [打印本页]

作者: 菜不鸟    时间: 2013-11-26 23:40
标题: 构造器调用的问题
如果调用类的一个构造器创建对象时 该构造器中调用了另一个构造器 那此时会创建一个对象还是两个对象?

作者: 石头6004    时间: 2013-11-27 05:37
本帖最后由 石头6004 于 2013-11-27 05:38 编辑

一个对象!
我测试了一下:
  1. package cn.itcast;

  2. public class Test {

  3.             public Test() {
  4.                 this(0);
  5.                 System.out.println(this.hashCode());
  6.             }
  7.             
  8.             public Test(int i) {
  9.                 System.out.println(this.hashCode());
  10.             }
  11.             
  12.             public static void main(String[] args) {
  13.                 new Test();
  14.             }
  15. }
复制代码


调用构造器,最终是返回对象的实例,外部可以访问,如果创建两个的话,返回的实例是1,还是2呢,貌似没有意义。最终只需要一个对象,即:new 了一次就创建了一个对象。
再说如果创建了两个但是只有一个有对象句柄,即可达,另一个则会不可达,这样后者就会成为垃圾资源,被垃圾回收。
构造器作用:
1.创建java对象的重要途径.
2.对系统产生的对象初始化
3.并将该对象作为返回值返回,是外部程序可以访问

作者: 乔_博_文    时间: 2013-11-27 09:15
这个问题很好解决,你就想一个类继承另一个类,那么子类中的构造器中默认省略了super();这一行代码,这条代码代表什么?代表了它调用了父类的构造器。但是当我们new一个子类对象的时候,是new出了一个子类对象和一个父类对象吗?显然不是的。代码证明如下:
  1. public class Father
  2. {
  3.         String name;
  4.         int age;
  5.        
  6.         public Father(){}//无参构造器(系统默认)
  7.        
  8.         public Father(String name, int age)//有参构造器
  9.         {
  10.                 this.name = name;
  11.                 this.age = age;
  12.         }
  13. }

  14. public class Son extends Father {
  15.         String school;
  16.        
  17.         public Son()
  18.         {
  19.                 super();//这行代码不写的话,系统会默认加上并且隐藏的。它调用了父类构造器。
  20.         }
  21.         public Son(String name, int age, String school)
  22.         {
  23.                 super.name = name;
  24.                 super.age = age;
  25.                 this.school = school;
  26.         }
  27. }

  28. public class NewTest
  29. {
  30.         public static void main(String[] args)
  31.         {
  32.                 Son Jim = new Son();//new 一个子类,很明显子类构造器中调用了父类构造方法,所以只是创建了一个子类对象。
  33.         }
  34. }
复制代码

作者: 菜不鸟    时间: 2013-11-27 23:31
感谢大神
作者: 菜不鸟    时间: 2013-11-28 20:44
谢谢了,很明了
作者: L_t    时间: 2013-12-1 19:46
谢谢楼主




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2