黑马程序员技术交流社区

标题: 求解关于静态代码块和构造代码块的疑问 [打印本页]

作者: baye1992    时间: 2016-3-28 16:23
标题: 求解关于静态代码块和构造代码块的疑问
  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?
静态代码块不应该是随着类的创建而创建,优先于构造代码块执行吗?

作者: baye1992    时间: 2016-3-28 16:44
找到原因了,
private static Single s = new Single();
这一句也是静态的~~


作者: 604840337    时间: 2016-3-28 18:20
找到就好~~~
作者: ameanboy    时间: 2016-3-28 18:37
补充下,如果类里有主函数,那么该类的静态代码块是优先于主函数加载的
作者: 我是你岁哥❤环    时间: 2016-3-28 18:48
ameanboy 发表于 2016-3-28 18:37
补充下,如果类里有主函数,那么该类的静态代码块是优先于主函数加载的

这是为什么呢?谢谢
作者: 向北_    时间: 2016-3-28 19:20
我是你岁哥❤环 发表于 2016-3-28 18:48
这是为什么呢?谢谢

先加载主函数所在的类
作者: ameanboy    时间: 2016-3-28 23:08
我是你岁哥❤环 发表于 2016-3-28 18:48
这是为什么呢?谢谢

静态代码块是类加载后第一个执行的操作序列
等你学到反射的时候,会有更深的理解,以及如何应用
作者: 我是你岁哥❤环    时间: 2016-3-30 02:15
ameanboy 发表于 2016-3-28 23:08
静态代码块是类加载后第一个执行的操作序列
等你学到反射的时候,会有更深的理解,以及如何应用 ...

好的,谢谢




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