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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨建聪 中级黑马   /  2013-1-7 16:45  /  1590 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张向辉 于 2013-1-16 11:53 编辑

Person p=new Person("zhangsan",20);

这句话在内存中都做了什么事情?

1.因为new用到了Person.class,所以会先找到Person.class文件并加载到内存中
2.执行该类中的static代码块,如果有的话,给Person.class类进行初始化
3.在堆内存中开辟空间,分配内存地址
4.在堆内存中建立对象的特有属性,并进行默认初始化
5.对属性进行显示初始化
6.对对象进行构造代码块初始化
7.对对象进行对应的构造函数初始化
8.将堆内存中的地址给栈内存中的p变量




第五步,对属性进行显示初始化是什么意思?百思不得其解{:soso_e117:}

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1 神马都是浮云

查看全部评分

5 个回复

倒序浏览
简单说就是赋初始值呀。
回复 使用道具 举报
就是如果你在定义属性时赋值了,就是执行这一步:如int num = 4; 先赋默认值0,然后显示初始化赋值4
回复 使用道具 举报
你好
  1. public class Person
  2. {
  3.         private String name="lisi";//默认初始化name值为null,显示初始化为lisi
  4.         private int age=10;//默认初始化age值为0,显示初始化为10
  5.         //构造函数初始化
  6.         Person(String name,int age)
  7.         {
  8.                 this.name=name;
  9.                 this.age=age;
  10.         }
  11.         
  12.         public static void main(String[] args)
  13.         {
  14.                 Person p=new Person("zhangsan",20); //调用构造函数初始化
  15.         }
  16. }
复制代码
回复 使用道具 举报
就是你在定义属性时简单的赋值.
回复 使用道具 举报
本帖最后由 杨远 于 2013-1-8 09:51 编辑
  1. class  PersonA
  2. {
  3.         String name;
  4.         int age;
  5. }

  6. class PersonB
  7. {
  8.         String name = "lisi";
  9.         int age = 10;
  10. }
复制代码
4楼何竹东的例子已经给出解释了。我做个补充:
显示初始化是和默认初始化只是对初始化进行细分时取不同的名字以进行区分的。
上面我的代码,可以这样来初步理解,
PersonA是定义了变量但没有赋值,即没有初始化;
PersonB定义了变量同时赋了值,即初始化了。
但实际上对于PersonA的情况,并不是没有赋值的,他是有初始值的,如String类型的是null,int类型的是0。
这个默认的赋值就叫做默认初始化。
而同样对于PersonB,实际上就也是先进行默认初始化后,再进行你给定的赋值,为示区别,这一步叫显示初始化。

评分

参与人数 1技术分 +1 收起 理由
高境 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马