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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© java冬冬 高级黑马   /  2013-4-19 14:57  /  1959 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 java冬冬 于 2013-4-19 18:34 编辑

main函数不是程序入口嘛,为什么先执行静态代码块
  1. class StaticCode
  2. {
  3. static
  4. {
  5. System.out.println("a");
  6. }
  7. }

  8. class StaticCodeDemo
  9. {
  10. static
  11. {
  12. System.out.println("b");
  13. }
  14. public static void main(String[] args)
  15. {
  16. new StaticCode();
  17. new StaticCode();
  18. System.out.println("over");
  19. }
  20. static
  21. {
  22. System.out.println("c");
  23. }
  24. }
复制代码


8 个回复

倒序浏览
静态代码块随着类的加载而执行,且只执行一次,程序需要先加载StaticCodeDemo类才能进入main函数
回复 使用道具 举报
静态代码块是随着类的加载而执行的,并只执行一次(因为类只加载一次即可)。显然,程序要执行,首先要加载类,执行静态代码块,然后执行main方法。因为静态代码块的作用就是初始化类的;构造函数是初始化对象的。
回复 使用道具 举报
一个类可以使用不包含在任何方法体重的静态代码块,当类被载入时,静态代码块被执行,且只执行一次。静态代码块经常用来进行类属性的初始化。
特点:随着类的加载而执行,只执行一次,用于给类进行初始化。
回复 使用道具 举报
静态代码块是随着类的加载而执行,并且只执行一次,可以对类进行初始化,它是优先于主函数存在的。
回复 使用道具 举报
main函数是程序的入口没错,但是程序需要进入main函数所在的类中才能找到main函数,所以在调用main函数时就已经加载了该类,静态代码块随着类的加载而执行,
所以该类中的两个静态代码块先执行,用来初始化该类,所以首先输出显示b,c;
然后才会进入main函数,main函数中有创建对象new StaticCode();的动作,这时就会调用类StaticCode,同样该类中静态代码块会执行,并且只执行一次,尽管你创建两个对象,所以这时只输出一个a,最后输出主函数中的over。
回复 使用道具 举报
main函数是程序入口不错,但是静态代码块是随着类的加载而执行的,所以优先于main方法,说简单一点,就是说main方法只是让java虚拟机知道到执行哪里,而真正执行的时候,类一加载,还是先执行静态代码块。
回复 使用道具 举报
多谢各位啦,愿在黑马见{:soso_e152:}
回复 使用道具 举报
因为静态代码块在类加载的时候就创建了,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马