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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 不再上网 中级黑马   /  2014-8-15 19:39  /  3170 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一个对象的实例化的过程是什么?

9 个回复

倒序浏览
对象的实例化过程
ArrayToolDemo A=New ArratToolDemo();   
此命令的运行过程如下

1.        加载  将类的class文件从硬盘中加载到内存中(一个程序最多加载一次)
2.        创建类的方法空间
3.        创建类的静态属性,并默认初始化
4.        静态属性显示初始化  //static int a=1;
5.        运行静态代码块      
6.        将方法空间地址送入类名保存
7.        开辟堆空间            
8.        建立对象属性,并默认初始化   int型默认初始化为0 string型默认初始化null
9.        对象属性显示初始化    int a=20;
10.        运行构造代码块
11.        运行构造函数
12.        将内存地址送入对象名
回复 使用道具 举报 2 0
安宁.沉睡 发表于 2014-8-15 20:52
对象的实例化过程
ArrayToolDemo A=New ArratToolDemo();   
此命令的运行过程如下

学习了,
回复 使用道具 举报

回答满意就帮我置顶哦~~:lol
回复 使用道具 举报 1 0
借鉴下  太详细了
回复 使用道具 举报
安宁.沉睡 发表于 2014-8-15 20:52
对象的实例化过程
ArrayToolDemo A=New ArratToolDemo();   
此命令的运行过程如下

其实不少步骤没有严格的顺序。比如:
3和4的顺序、9和10的顺序都取决于声明的先后。
11也不全在9、10之后,构造函数调用父类构造函数是在实例成员默认初始化之前完成的,而构造函数的其他语句在实例成员默认初始化和显式初始化之后完成。实际上,实例成员的默认初始化、显式初始化、实例初始化块是被放入构造函数中执行的
构造函数可能在所有静态成员初始化完毕之前就被调用。比如:
class Test {
    static Test t = new Test();
    static int a = 3;
}
则在a初始化之前就会执行构造函数
回复 使用道具 举报
fantacyleo 发表于 2014-8-16 00:36
其实不少步骤没有严格的顺序。比如:
3和4的顺序、9和10的顺序都取决于声明的先后。
11也不全在9、10之后 ...

抱歉了,这是我在学初始化过程做的总结,当时没有考虑继承的问题,继承的初始化可能更复杂。
就没有继承而言的话,3.4,9,10是有顺序的,这个我在当时运行验证过了,谢谢你的补充:)
回复 使用道具 举报
fantacyleo 发表于 2014-8-16 00:36
其实不少步骤没有严格的顺序。比如:
3和4的顺序、9和10的顺序都取决于声明的先后。
11也不全在9、10之后 ...
  1. public class Time {
  2.         public static void main(String[] args) {
  3.                 Test T=new Test();
  4.         }

  5. }
  6. class Test {
  7.     static Test t = new Test();
  8.     static int a = 3;
  9.     {
  10.             System.out.println(a);
  11.     }
  12. }

复制代码

运行结果为
0
3
说明在主函数中Test T=new Test();
T对象初始化中,属性的t,和a的建立在在构造函数之前 ,先输出0代表先建立了属性t,后输出3代表建立t和a之后运行了构造函数
你所说的先执行构造函数 其实那是在建立t属性时执行另一个对象初始化
static Test t = new Test();
但是先输出0 ,代表在这个初始化中也是先建立了属性a,并默认初始化为0后才运行的构造函数
回复 使用道具 举报
安宁.沉睡 发表于 2014-8-16 07:04
抱歉了,这是我在学初始化过程做的总结,当时没有考虑继承的问题,继承的初始化可能更复杂。
就没有继承 ...

3和4的顺序、9和10的顺序跟继承没关系,只取决于声明的先后。
回复 使用道具 举报

这个是我少打了两个字,抱歉,应该是在a【显式】初始化之前就会执行构造函数
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马