黑马程序员技术交流社区

标题: 代码执行顺序的疑惑 [打印本页]

作者: 于潇    时间: 2012-4-26 09:58
标题: 代码执行顺序的疑惑
本帖最后由 于潇 于 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后,结果与第二次还不一样,总么回事呢?

作者: 刘永菲    时间: 2012-4-26 10:04
因为静态初始化块只会在第一次装入系统的时候运行,当再次实例化的时候就不需要再执行了,因为已经存在了


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

静态代码块的确是在初始化的时候运行的,但是如果第二次实例化这个类的实例的时候就不执行了
作者: 陆强强    时间: 2012-4-26 10:33
静态代码块在类第一次被实例化的时候执行,只执行一次;
构造代码块在每次类实例化的时候,优先于其他的函数等执行;
构造函数只有在对象被调用的时候执行
作者: 林德燚    时间: 2012-4-26 10:45
1、静态代码块在类加载时执行的,所以它只运行一次,且优先级最高,静态变量也一样,它们之间看先后顺序;
2、代码块的在构造函数调用前被调用,它优先与构造函数;

作者: 张亭    时间: 2012-4-26 10:54
毕老师教程里都讲得很清楚了,看来楼主没认真看视频哈!!
楼上都回答了,俺就不重复了{:soso_e129:}
作者: 高彰谦    时间: 2012-4-26 12:59
你自己写的够清楚了,
第一次:静态块->动态块->构造方法
第二次:动态块->构造方法
为什么第一次和第二次不同? 因为静态变量只初始化一次,静态块也只执行一次
作者: 魏征    时间: 2012-4-26 13:24
本帖最后由 魏征 于 2012-4-26 13:28 编辑

静态代码块是用于对类的初始化,优先于函数和代码块,只运行一次,第一次实例化后已经初始化完毕,所以第二次实例化类不需要初始化了,所以静态不再运行。
作者: 付左军    时间: 2012-4-26 21:03
首先:静态代码块,是给类初始化的,随着类的加载(进内存)后只执行一次,
其次:构造代码块,是给所有对象初始化的,
然后:构造函数,是给调用它的对象初始化的,




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