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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© shuizhuqing 中级黑马   /  2015-4-29 00:17  /  543 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1.Person p=new Person("zhangsan",20);
        该句话所做的事情:
        1.在栈内存中,开辟main函数的空间,建立main函数的变量 p。
        2.加载类文件:因为new要用到Person.class,所以要先从硬盘中找到Person.class类文件,并加载到内存中。
                加载类文件时,除了非静态成员变量(对象的特有属性)不会被加载,其它的都会被加载。
                记住:加载,是将类文件中的一行行内容存放到了内存当中,并不会执行任何语句。//-->
                 --------->>>>  //---->加载时期,即使有输出语句也不会执行。
                       
                        静态成员变量(类变量)                ----->方法区的静态部分
                        静态方法                              ----->方法区的静态部分
                        非静态方法(包括构造函数)        ----->方法区的非静态部分
                        静态代码块                                        ----->方法区的静态部分
                        构造代码块                                        ----->方法区的静态部分
                       
                        注意:在Person.class文件加载时,静态方法和非静态方法都会加载到方法区中,
                        只不过要调用到非静态方法时需要先实例化一个对象,对象才能调用非静态方法。
                        如果让类中所有的非静态方法都随着对象的实例化而建立一次,那么会大量消耗内存资源,
                        所以才会让所有对象共享这些非静态方法,然后用this关键字指向调用非静态方法的对象。

       
        3.执行类中的静态代码块:如果有的话,对Person.class类进行初始化。
        4.开辟空间:在堆内存中开辟空间,分配内存地址。
        5.默认初始化:在堆内存中建立 对象的特有属性,并进行默认初始化。
        6.显示初始化:对属性进行显示初始化。
        7.构造代码块:执行类中的构造代码块,对对象进行构造代码块初始化。
        8.构造函数初始化:对对象进行对应的构造函数初始化。
        9.将内存地址赋值给栈内存中的变量p。

评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1

查看全部评分

4 个回复

倒序浏览
路过,看看,受教了……
回复 使用道具 举报
毕老师  视频有讲
回复 使用道具 举报
嗯  总结的不错!!!!!!!!
回复 使用道具 举报
总结的太好了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马