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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 于潇 中级黑马   /  2012-4-26 09:58  /  2210 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 于潇 于 2012-4-26 10:00 编辑

有人说在没有写初始化块和静态初始化块的程序中,首先执行的都是构造方法,主要用于初始化,但是初始化代码块、静态初始化代码块、构造方法它们之间的执行顺序是什么样子的呢?

  1. package test5;
  2. public class Test1 {
  3. public static void main(String args[])
  4. {
  5.   Test2 t1 = new Test2();
  6.   System.out.println("----------第二次实例化----------");
  7.   Test2 t2 = new Test2();
  8. }
  9. }
  10. class Test2
  11. {
  12. //构造方法
  13. public Test2()
  14. {
  15.   System.out.println("构造方法");
  16. }
  17. //初始化代码块
  18. {
  19.   System.out.println("初始化代码块");
  20. }
  21. //静态初始化代码块
  22. static
  23. {
  24.   System.out.println("静态初始化代码块");
  25. }
  26. }
复制代码
执行后的顺序是



  • 静态初始化代码块
  • 初始化代码块
  • 构造方法
  • ----------第二次实例化----------
  • 初始化代码块
  • 构造方法


第一次实例化Test2后,结果与第二次还不一样,总么回事呢?

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

7 个回复

正序浏览
首先:静态代码块,是给类初始化的,随着类的加载(进内存)后只执行一次,
其次:构造代码块,是给所有对象初始化的,
然后:构造函数,是给调用它的对象初始化的,
回复 使用道具 举报
魏征 中级黑马 2012-4-26 13:24:19
7#
本帖最后由 魏征 于 2012-4-26 13:28 编辑

静态代码块是用于对类的初始化,优先于函数和代码块,只运行一次,第一次实例化后已经初始化完毕,所以第二次实例化类不需要初始化了,所以静态不再运行。
回复 使用道具 举报
你自己写的够清楚了,
第一次:静态块->动态块->构造方法
第二次:动态块->构造方法
为什么第一次和第二次不同? 因为静态变量只初始化一次,静态块也只执行一次
回复 使用道具 举报
毕老师教程里都讲得很清楚了,看来楼主没认真看视频哈!!
楼上都回答了,俺就不重复了{:soso_e129:}
回复 使用道具 举报
1、静态代码块在类加载时执行的,所以它只运行一次,且优先级最高,静态变量也一样,它们之间看先后顺序;
2、代码块的在构造函数调用前被调用,它优先与构造函数;
回复 使用道具 举报
静态代码块在类第一次被实例化的时候执行,只执行一次;
构造代码块在每次类实例化的时候,优先于其他的函数等执行;
构造函数只有在对象被调用的时候执行

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

回复 使用道具 举报
因为静态初始化块只会在第一次装入系统的时候运行,当再次实例化的时候就不需要再执行了,因为已经存在了


静态代码块是在类初始化的时候被执行的,和类的实例化次数没有关系。

静态代码块的确是在初始化的时候运行的,但是如果第二次实例化这个类的实例的时候就不执行了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马