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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 我为你着迷 金牌黑马   /  2014-4-4 23:02  /  1459 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 我为你着迷 于 2014-4-4 23:06 编辑
  1. class StaticCode
  2. {
  3.                         static
  4.                         {
  5.                                         System.out.println("a");
  6.                         }
  7.                    public  static void show()
  8.                    {
  9.                                    System.out.prinln("show run");
  10.                                    
  11.                    }

  12. }

  13. class StaticCodeDemo
  14. {
  15.                 static
  16.                 {
  17.                         
  18.                 }
  19.     public static void String[] args}
  20.     {
  21.       StaticCode.show();
  22.     }

  23.    static
  24.                 {
  25.                         
  26.                 }
  27. }
复制代码
大家好,我有个问题就是 StaticCode一调用上边的StaticCode类,那么类就会在内存中加载,所以静态代码块优先执行从而先打印的是a,最后打印的是show方法里边的show run。
可是我的理解是只要show方法一调用的话应该先打印的是show run的呀,而不是先打印的a呀。毕老师说静态代码块是优先于主函数运行,那么show又不是主函数,所以应该是先打印的是show run才对的呀!转不过弯来。麻烦大伙帮忙解决下,谢谢了!最后还有一个问题! 就是静态代码块是优先于构造代码块先执行的吗?


评分

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

查看全部评分

6 个回复

倒序浏览
静态代码块儿是优先于主函数的,StaticCodeDemo类加载的时候,static代码块儿随着类的加载就进入内存的方法区了,但是代码块儿中没有具体定义,所以没有输出。然后调用main()方法,通过类名调用StaticCode中的静态方法show(),因为优先于构造函数,所以在加载类的时候调用了StaticCode中的static代码块儿,输出a,然后才是执行方法输出show run。

评分

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

查看全部评分

回复 使用道具 举报
四川男人 发表于 2014-4-5 01:48
静态代码块儿是优先于主函数的,StaticCodeDemo类加载的时候,static代码块儿随着类的加载就进入内存的方法 ...

这个代码中应该没有定义构造函数的吧!
回复 使用道具 举报
静态代码块先执行的  
回复 使用道具 举报
非常感谢,懂了!
回复 使用道具 举报
四川男人 发表于 2014-4-5 01:48
静态代码块儿是优先于主函数的,StaticCodeDemo类加载的时候,static代码块儿随着类的加载就进入内存的方法 ...

构造函数是创建类的对象的时候使用的,而static代码块是在类加载的时候就使用了。所以static优先于构造函数
回复 使用道具 举报
先回答你的问题,静态代码块的优先级高于构造函数。
第一,静态代码块随着类的加载而执行,只执行一次。
第二,静态变量也是随着类的加载而执行,只执行一次。
第三,成员变量随着对象的初始化而加载。成员变量的初始化在类的所有方法之前初始化,包括构造方法。
第四,构造方法也是随着对象的创建而加载。成员变量先初始化后再调用构造方法。
第五,静态方法,只有调用的时候才会加载。所以最后没有输出。
  1. class StaticCodeAndVariablesDemo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 new StaticCodeVar();
  6.         }
  7. }
  8. class StaticCodeVar
  9. {
  10.         static int num = 6;
  11.         {
  12.                 System.out.println("静态变量!");
  13.         }
  14.         static
  15.         {
  16.                 System.out.println("静态代码块!");
  17.         }
  18.         int x = 10;
  19.         {
  20.                 System.out.println("成员变量!");
  21.         }
  22.         StaticCodeVar()
  23.         {
  24.                 System.out.println("构造函数!");
  25.         }
  26.         static void show()
  27.         {
  28.                 System.out.println("静态方法!");
  29.         }
复制代码



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