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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 杨修 于 2013-3-28 22:36 编辑

求大神帮忙分析下:构造函数、构造代码块、静态代码块的执行顺序????

点评

如果问题未解决,请继续追问回复者,如果问题已经解决,请将分类改为“已解决”,谢谢  发表于 2013-3-27 19:42

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

9 个回复

倒序浏览
可以这样考虑,当你要使用某个类的时候;
首先你要加载这个类,
1静态代码块的特点:
随着类的加载而只执行一次,并优先于主函数执行,用于给类初始化。
然后如果你要建立一个对象的话,
2构造代码块:
作用:用于给对象进行初始化,对象一建立就执行,优先于3构造函数执行;
构造代码块是给所有对象进行统一初始化;
构造函数是给对应对象进行初始化;
应该是这样。。。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
你好楼主   我来详细为你解答。

------静态代码块

当编译时,.class字节码文件就加载到了内存,主函数所属的类先加载到内存,所以静态代码块先被执行,当主函数中创建person对象时

这时person类的字节码文件也加载到内存中,然后初始化Person类。

(特点:随着类的加载而执行,只执行一次,并优先于主函数。
用于给类进行初始化的。)

------构造代码块

作用:  给对象进行初始化。
        对象一建立就运行,而且优先于构造函数执行。
        和构造函数的区别:
        构造代码块是给所有对象进行统一初始化,
        而构造函数是给对应的对象初始化。
        
构造代码块中定义的是不同对象的共性初始化内容。(有名字的孩子和没名字的孩子都哭,哭就定义在构造代码块里)

------构造函数

构造函数和一般函数在写法上有不同。

在运行上也有不同。
构造函数是在对象一建立就运行。给对象初始化。
而一般方法是对象调用才执行,是给对象添加对象具备的功能。

一个对象建立,构造函数只运行一次。
而一般方法可以被该对象调用多次。

什么时候定义构造函数呢?
当分析事物时,该事物存在具备一些特性或者行为,那么将这些内容定义在构造函数中。

评分

参与人数 1技术分 +1 收起 理由
scott0610 + 1

查看全部评分

回复 使用道具 举报
构造函数、构造代码块、静态代码块的执行顺序?

答:
程序运行先是装载静态代码块,然后再装载类,再类中先运行构造代码块,然后再运行构造函数。

静态代码块只运行一次,随程序运行而运行,优先于其他语句

构造代码块,优先于构造函数,当每初始化对象的时候会调用一次,优先与构造函数

构造函数(方法):每当初始化对象的时候会调用一次,构造方法可以进行重载

希望对你有所帮助,我也是菜鸟  希望能一起进步

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 贾振凯 于 2013-3-27 16:23 编辑
  1. class A
  2. {
  3. static{
  4. System.out.println("A----------------静态代码块!");
  5. }

  6. public A(){
  7. System.out.println("A----------------构造器!");
  8. }

  9. {
  10. System.out.println("A----------------非静态代码块!");
  11. }
  12. }

  13. public class B extends A
  14. {
  15. static{
  16. System.out.println("B----------------静态代码块!");
  17. }

  18. public B(){
  19. System.out.println("B----------------构造器!");
  20. }

  21. {
  22. System.out.println("B----------------非静态代码块!");
  23. }



  24. public static void main(String[] args)
  25. {
  26. B a = new B();
  27. }
  28. }
复制代码

不多说(模仿下老毕呵呵.......)
回复 使用道具 举报
首先执行静态代码块,然后执行构造方法。静态代码块在类被加载的时候执行,而构造方法是在生成对象的时候执行。
在继承体系中,如果既有构造方法又有静态代码块,那么首先执行最顶层的类的静态代码块,一直执行到最底层类的静态代码块,然后再去执行最顶层的构造方法,一直执行到最底层的构造方法。注意:静态代码块只会执行一次。
回复 使用道具 举报
胡军 中级黑马 2013-3-28 09:21:16
7#
它们的执行顺序是
1.静态代码块随着类的加载而被执行,因为它有一个static修饰符
2.当建立对象时,会优先执行构造代码块
3.然后在执行对应参数的构造函数

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
罗平 中级黑马 2013-3-28 13:34:04
8#
静态代码块———》构造代码块-------》构造函数
回复 使用道具 举报
罗平 中级黑马 2013-3-28 13:34:21
9#
静态代码块———》构造代码块-------》构造函数
回复 使用道具 举报

求大神帮忙分析下:构造函数、构造代码块、静态代码块的执行顺序????

首先先建一个类,编译成解释器能识别的class文件,JVM加载class文件,先对类进行初始化,也就是执行静态代码块。
然后,当我们在new对象时,构造代码块目地就是给对象共有的属性进行初始化。
其次,构造函数是对具体的对象进行具体的初始化。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马