黑马程序员技术交流社区

标题: 对象实例化过程 [打印本页]

作者: 狼王    时间: 2013-6-9 08:33
标题: 对象实例化过程
本帖最后由 狼王 于 2013-6-9 14:49 编辑

静态代码块,构造代码块,构造函数在初始化时执行的顺序?
作者: 张歆明    时间: 2013-6-9 08:51
************************************************
静态代码块,构造代码块,构造函数在初始化时执行的顺序?

************************************************
执行顺序就是静态代码块--- 》构造代码块----》构造函数

为了不发生歧义  举一个例子(毕老师总结)
Person p =new Person();

(1). 因为new的时候用到了Person.class 如果是第一次用到Person  则JVM会先找到Person.class 并加载到内存 ( 就执行一次))
(2). 如果该类存在静态代码块,执行静态代码块  (静态代码块的执行目的就是为整个类进行初始化 就执行一次
(3). 在堆内存中开辟空间,分配内存地址
(4). 在堆内存中建立对象的属性(非静态),并进行默认初始化(堆内存中的成员变量都有默认值)
(5). 对成员进行显示初始化
class  Person{
  private int age; //只有默认初始化 初始化为0
  private String name ="Benjamin";//先默认初始化为null, 再显式初始化为Benjamin
}
(6). 对对象进行构造代码块初始化
(7). 对对象进行对应的构造函数初始化
(所有该类的实例在初始化的时候  都要先构造代码块初始化  无论你调用的是哪一种构造方法  
  每一次都走相同的构造代码块  所以  构造代码块是所有对象共性的初始化  调用的各自的构造函数是个性的初始化)
(8).  将内存地址赋值给栈内存中的p引用变量





作者: librazeng    时间: 2013-6-9 12:53
本帖最后由 librazeng 于 2013-6-9 13:06 编辑

1.先执行静态代码块随着类的加载而加载,先于对象而存在,类初始化时自动执行一次。2.然后执行构造代码块
3.最后执行构造函数

示例:
  1. public class TestDemo
  2.         {
  3.                 static{//静态代码块
  4.                         int a=10;  
  5.                         System.out.println("静态代码块a="+a);
  6.                 }
  7.                         public TestDemo()//构造函数(方法)  
  8.                     {  
  9.                         int a=9;  
  10.                         System.out.println("构造函数a="+a);  
  11.                     }  
  12.                     { //构造代码块  
  13.                         int a=8;//未创建对象,不会运行.  
  14.                         System.out.println("构造代码a="+a);  
  15.                     }
  16.                     public static void main(String []args)  
  17.                     {  
  18.                         System.out.println("运行结果");  
  19.                         new TestDemo();  
  20.                     }
  21. }
  22. 运行结果:
  23. 静态代码块a=10
  24. 运行结果
  25. 构造代码a=8
  26. 构造函数a=9
复制代码

作者: 袁梦希    时间: 2013-6-9 14:45
楼主你好  如果帖子的问题已经解决,请把帖子的类型改为“已解决”。{:soso_e102:}
作者: 狼王    时间: 2013-6-9 14:46
袁梦希 发表于 2013-6-9 14:45
楼主你好  如果帖子的问题已经解决,请把帖子的类型改为“已解决”。 ...

好的,谢谢提醒。。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2