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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 十指相扣 中级黑马   /  2014-3-27 23:46  /  1939 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

代码如下

class Employee{
        private String name ;
        private String sex;
        private int age;
        Employee(String nm)        {
                name = nm;
        }
        Employee(String nm,String s){
                this(nm);
                sex = s;
        }
        Employee(String nm,String s,int a){      A
                //Employee(nm,s);
                this(nm,s); //在调用本来中拥有2个字符串参数的构造方法
                System.out.println("this="+this);
                age = a;
                name = "xxxx";
        }
        void say()        {
                System.out.println("name="+name+",sex="+sex+",age="+age);
        }

}
class PersonDemo2 {
        public static void main(String[] args)         {
                Employee e = new Employee("zhangsan","nv",23);   A
                e.say();
        }
}

分析如下:

1, 加载PersonDemo文件,加载主方法,new一个class文件, 如果有就不创建,没有创建,
然后在方法区的class文件区域加载成员变量,
2,然后再堆中创建对象
   
    1、开辟内存空间,划分内存地址
    2、成员变量默认初始化
3、调用对应的构造方法
在这里name简写成nm,sex  简写成s,   age简写成a
就是含三个参数的构造方法,  C---------Employee(String nm,String s,int a)
把,zhangsan,nv ,23三个实际参数赋值给形式参数nm ,s ,a
C方法中  nm=zhangsan;
          S = nv;
          a=23;
然后执行 this(nm,s)  去寻找本类中的含有两个参数的构造函数

然后调用含 两 个参数的构造方法,B -----------Employee(String nm,String s)
然后此函数得到了两个实际参数,mn,s
然后执行 this(nm)  去寻找本类中的含有一个参数的构造函数

再调用含有 一 个的构造方法, -A--------Employee(String nm,)
把zhagnsan,给两个实际参数赋值给形式参数nm ,
     name=zhangsan,
但是此时此句应该是this.name=zhangsan  前面的this是省略掉了
(注意:因为本方法中没有自定义name变量,所以根据就近原则,它会去在类中找到堆中的变量name,)


然后开始改变堆里的对象的名字 name=null------------zhangsan, name= zhangsan
然后此方法(第一个构造方法)从栈中出去,
然后到第二个方法赋值 sex=null--------nv,  sex=nv
第二个构造方法从栈出去
  
然后到第三个构造下面的
    a=null------------23;
    a=23;
    然后是:name=zhangsan---------------xxxxxxx
           Name=zhangsan
4、最后打印的结果是:
Name=zhangsan
sex=nv
age=23
111111.jpg
2222222.jpg
333333.jpg

1 个回复

倒序浏览
值得学习ing!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马