Java中对象初始化的过程和对象调用成员的过程

Edit

 

Java中对象初始化的过程和对象调用成员的过程

1.对象初始化过程

Person p = new Person(“zhangsan”,30)

上面的代码做了如下事情:
1在栈内存中建立main变量和P变量;
2.因为new用到了Person.class文件,所以首先会将Person.class加载到内存;
3.执行static静态代码块(如果有的话),会给Person类进行初始化;
4.在堆内存中开辟空间,分配内存地址;
5.在堆内存中建立对象的特有属性,并默认初始化;
6.对堆内存中的对象进行构造代码块初始化;
7.对堆内存中对象进行相应的构造函数初始化;
8.将对象的内存地址值给堆内存中的P变量;

2.对象调用成员过程

Person p = new Person(“张三”,10);
p.setName(“李四”);//Person类中有静态变量和静态方法

上面在内存中做了如下事情:
1.在栈内存中建立main,还有P变量;
2.加载Person类,并在方法区建立静态变量和方法,以及其他方法和变量;
3.在堆内存中建立newPerson,并初始化后,将地址地址给栈内存中的P变量,这个P就指向了堆内存的Person对象;
4.在栈内存中创建SetName区域,同时里面有name变量和this变量;
5.将P的值给setName的this,那么这个this,就指向了堆内存中newPerson对象
6.最后setName的代码this.name=name将堆内存中的name=”张三” 改为了 name=”李四”

示意图

 

@%2802.Java%29%5B%u5BF9%u8C61%u521D%u59CB%u5316%u7684%u8FC7%u7A0B%2C%u5BF9%u8C61%u8C03%u7528%u6210%u5458%u7684%u8FC7%u7A0B%5D%0A%23Java%u4E2D%u5BF9%u8C61%u521D%u59CB%u5316%u7684%u8FC7%u7A0B%u548C%u5BF9%u8C61%u8C03%u7528%u6210%u5458%u7684%u8FC7%u7A0B%0A%23%231.%u5BF9%u8C61%u521D%u59CB%u5316%u8FC7%u7A0B%0APerson%20p%20%3D%20new%20Person%28%22zhangsan%22%2C30%29%0A%0A%u4E0A%u9762%u7684%u4EE3%u7801%u505A%u4E86%u5982%u4E0B%u4E8B%u60C5%3A%0A1%u5728%u6808%u5185%u5B58%u4E2D%u5EFA%u7ACBmain%u53D8%u91CF%u548CP%u53D8%u91CF%3B%0A2.%u56E0%u4E3Anew%u7528%u5230%u4E86Person.class%u6587%u4EF6%2C%u6240%u4EE5%u9996%u5148%u4F1A%u5C06Person.class%u52A0%u8F7D%u5230%u5185%u5B58%3B%0A3.%u6267%u884Cstatic%u9759%u6001%u4EE3%u7801%u5757%28%u5982%u679C%u6709%u7684%u8BDD%29%2C%u4F1A%u7ED9Person%u7C7B%u8FDB%u884C%u521D%u59CB%u5316%3B%0A4.%u5728%u5806%u5185%u5B58%u4E2D%u5F00%u8F9F%u7A7A%u95F4%2C%u5206%u914D%u5185%u5B58%u5730%u5740%3B%0A5.%u5728%u5806%u5185%u5B58%u4E2D%u5EFA%u7ACB%u5BF9%u8C61%u7684%u7279%u6709%u5C5E%u6027%2C%u5E76%u9ED8%u8BA4%u521D%u59CB%u5316%3B%0A6.%u5BF9%u5806%u5185%u5B58%u4E2D%u7684%u5BF9%u8C61%u8FDB%u884C%u6784%u9020%u4EE3%u7801%u5757%u521D%u59CB%u5316%3B%0A7.%u5BF9%u5806%u5185%u5B58%u4E2D%u5BF9%u8C61%u8FDB%u884C%u76F8%u5E94%u7684%u6784%u9020%u51FD%u6570%u521D%u59CB%u5316%3B%0A8.%u5C06%u5BF9%u8C61%u7684%u5185%u5B58%u5730%u5740%u503C%u7ED9%u5806%u5185%u5B58%u4E2D%u7684P%u53D8%u91CF%3B%0A%0A%23%232.%u5BF9%u8C61%u8C03%u7528%u6210%u5458%u8FC7%u7A0B%0APerson%20p%20%3D%20new%20Person%28%22%u5F20%u4E09%22%2C10%29%3B%0Ap.setName%28%22%u674E%u56DB%22%29%3B//Person%u7C7B%u4E2D%u6709%u9759%u6001%u53D8%u91CF%u548C%u9759%u6001%u65B9%u6CD5%0A%0A%u4E0A%u9762%u5728%u5185%u5B58%u4E2D%u505A%u4E86%u5982%u4E0B%u4E8B%u60C5%3A%0A1.%u5728%u6808%u5185%u5B58%u4E2D%u5EFA%u7ACBmain%2C%u8FD8%u6709P%u53D8%u91CF%3B%0A2.%u52A0%u8F7DPerson%u7C7B%2C%u5E76%u5728%u65B9%u6CD5%u533A%u5EFA%u7ACB%u9759%u6001%u53D8%u91CF%u548C%u65B9%u6CD5%2C%u4EE5%u53CA%u5176%u4ED6%u65B9%u6CD5%u548C%u53D8%u91CF%3B%0A3.%u5728%u5806%u5185%u5B58%u4E2D%u5EFA%u7ACBnewPerson%2C%u5E76%u521D%u59CB%u5316%u540E%2C%u5C06%u5730%u5740%u5730%u5740%u7ED9%u6808%u5185%u5B58%u4E2D%u7684P%u53D8%u91CF%2C%u8FD9%u4E2AP%u5C31%u6307%u5411%u4E86%u5806%u5185%u5B58%u7684Person%u5BF9%u8C61%3B%0A4.%u5728%u6808%u5185%u5B58%u4E2D%u521B%u5EFASetName%u533A%u57DF%2C%u540C%u65F6%u91CC%u9762%u6709name%u53D8%u91CF%u548Cthis%u53D8%u91CF%3B%0A5.%u5C06P%u7684%u503C%u7ED9setName%u7684this%2C%u90A3%u4E48%u8FD9%u4E2Athis%2C%u5C31%u6307%u5411%u4E86%u5806%u5185%u5B58%u4E2DnewPerson%u5BF9%u8C61%0A6.%u6700%u540EsetName%u7684%u4EE3%u7801this.name%3Dname%u5C06%u5806%u5185%u5B58%u4E2D%u7684name%3D%22%u5F20%u4E09%22%20%u6539%u4E3A%u4E86%20name%3D%22%u674E%u56DB%22%0A%0A**%u793A%u610F%u56FE**%0A%21%5BAlt%20text%5D%28./QQ%u622A%u56FE20161022152346.jpg%29%0A

 

posted @ 2017-07-05 14:50  RuntimExcep  阅读(363)  评论(0编辑  收藏  举报