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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. class Single
  2. {
  3.     private static Single s = new Single();
  4.    
  5.     private Single(){}
  6.    
  7.     {
  8.         System.out.println("a");
  9.     }
  10.    
  11.     static
  12.     {
  13.         System.out.println("b");
  14.     }
  15.    
  16.     public static Single getInstance()
  17.     {
  18.         return s;
  19.     }
  20. }



  21. class SingleDemo
  22. {
  23.     static
  24.     {
  25.         System.out.println("c");
  26.     }
  27.    
  28.     public static void main(String[] args)
  29.     {
  30.         Single ss = Single.getInstance();
  31.     }
  32. }
复制代码



为什么结果不是c b a?
静态代码块不应该是随着类的创建而创建,优先于构造代码块执行吗?

7 个回复

倒序浏览
找到原因了,
private static Single s = new Single();
这一句也是静态的~~

回复 使用道具 举报
找到就好~~~
回复 使用道具 举报
补充下,如果类里有主函数,那么该类的静态代码块是优先于主函数加载的
回复 使用道具 举报
ameanboy 发表于 2016-3-28 18:37
补充下,如果类里有主函数,那么该类的静态代码块是优先于主函数加载的

这是为什么呢?谢谢
回复 使用道具 举报

先加载主函数所在的类
回复 使用道具 举报

静态代码块是类加载后第一个执行的操作序列
等你学到反射的时候,会有更深的理解,以及如何应用
回复 使用道具 举报
ameanboy 发表于 2016-3-28 23:08
静态代码块是类加载后第一个执行的操作序列
等你学到反射的时候,会有更深的理解,以及如何应用 ...

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