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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 狼王 高级黑马   /  2013-6-9 08:33  /  1416 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 狼王 于 2013-6-9 14:49 编辑

静态代码块,构造代码块,构造函数在初始化时执行的顺序?

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 新人鼓励 狼你好

查看全部评分

4 个回复

倒序浏览
************************************************
静态代码块,构造代码块,构造函数在初始化时执行的顺序?

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

为了不发生歧义  举一个例子(毕老师总结)
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引用变量




评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
本帖最后由 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
复制代码

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
楼主你好  如果帖子的问题已经解决,请把帖子的类型改为“已解决”。{:soso_e102:}
回复 使用道具 举报
袁梦希 发表于 2013-6-9 14:45
楼主你好  如果帖子的问题已经解决,请把帖子的类型改为“已解决”。 ...

好的,谢谢提醒。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马