A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 冯云飞 于 2013-7-28 20:17 编辑
  1. class Person
  2. {
  3.                 private String name;
  4.                 private int age;

  5.             Person(String name,int age)
  6.         {
  7.                 this.name=name;
  8.                 this.age=age;
  9.                 run();
  10.                 }

  11.         public void run()

  12.         {
  13.                 System.out.println(name+age);
  14.         }

  15. }

  16. class demo
  17. {
  18.         public static void main(String[] args)
  19.         {
  20.                 Person p = new Person("你妹",22);
  21.                 p.run();
  22.         
  23.         }

  24. }
复制代码
上面类里的run()    和 下面这个p.run() ;   哪个先执行的?为什么?

6 个回复

倒序浏览
按照主函数中的代码顺序,先执行的是new对象的代码,因为new对象的时候是调用了构造函数,构造函数调用了run方法
当对象创建以后,才是在主函数中调用run方法。
程序中加一句验证代码,一目了然。。。如下
  1. Person(String name,int age)
  2.         {
  3.                 this.name=name;
  4.                 this.age=age;
  5.                 run();
  6.                 System.out.println("---");
  7.                 }
复制代码
回复 使用道具 举报
对象初始化工作要首先执行,所以构造方法中run要先执行,在建立对象的同时执行。此时对象初始化还没完成,所以打印是的0 0它表示在对象的生成的同时就调用了一次run方法,后来又调用了一次是初始化完成调用的,后面打印的是初始化后的值。应该打是“你妹‘  22。一句话,调用这个构造方法的对象都是必须调用一次run方法才算完成了初始化。
回复 使用道具 举报
Person p = new Person("你妹",22);当创建Person对象时,自动调用匹配的构造方法,在构造方法中调用上面的run(),所以类中的run()方法先执行。
然后才执行 p.run();
因为每个对象的创建都会调用匹配的构造函数,这是系统自动调用的,所以在构造函数中的run()先执行。
回复 使用道具 举报
一个是构造函数初始化,一个是方法调用,当然是对象构造函数的内容中run()先执行,对象建立后在有方法调用;
回复 使用道具 举报
首先你要搞清楚你的对象的初始化过程。
对这句代码来说:Person p = new Person("你妹",22);
1,首先加载类的字节码文件进入堆内存
2,因为你的代码没有静态代码块,所以这步跳过。
3,在堆内存中开辟空间,分配地址值。
4,在堆内存中建立属性并初始化属性值为null。
5,对属性进行显示初始化,因为你没有显示初始化的代码,所以这步跳过。
6,因为你的代码没有构造代码快,所以没有进行构造代码块对象初始化。
7,这步就是执行构造函数对对象进行初始化了。这步第一次执行了run()方法。
8,最后将地址值赋给引用变量p
9,执行成员函数run()方法的调用,这是第二次调用。

希望对你有帮助!{:soso_e141:}

回复 使用道具 举报
构造函数在建立对象的时候对对象进行初始化,自然构造函数里的ran()方法先执行。


希望能帮到你  共同学习
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马