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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© chuanyueing 中级黑马   /  2013-2-21 12:17  /  1073 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 朱玺 于 2013-2-21 12:22 编辑

这里有几个疑问,1:{System.out.println("c"+this.num)},在程序里可以直接括号里面写程序?这个叫什么结构?
                            2:为什么执行顺序是先a之后是c,而我认为是先a在d,关键是搞不懂问题1是什么结构,哪位大侠给详细解释下,谢谢了!
  1. class StaticCode
  2. {
  3.      int num = 9;
  4.      StaticCode()
  5.      {
  6.           System.out.println("b");
  7.      }

  8.      static
  9.      {
  10.           System.out.println("a");
  11.      }

  12.      {
  13.           System.out.println("c"+this.num);
  14.      }

  15.      StaticCode(int x)
  16.      {
  17.           System.out.println("d");
  18.      }

  19.      public static void show()
  20.      {
  21.           System.out.println("show run");
  22.      }
  23. }

  24. class StaticCodeDemo
  25. {
  26.      public static void main(String[] args)
  27.      {
  28.           new StaticCode(4);//a c d
  29.      }
复制代码

3 个回复

倒序浏览
问题一是动态代码块啊,动态代码块在类加载的时候就会执行,不过是在静态代码块后面。
代码块只在类加载时时执行,也就是只执行一次,大都用于初始化数据。
回复 使用道具 举报
对象初始化的过程是先执行static代码块,然后是进行默认初始化,接着是对属性进行显示初始化,最后是构造函数初始化。
System.out.println("c"+this.num);是显示初始化 ,所以在构造函数初始化之前。
回复 使用道具 举报
程序初始化时先执行静态代码块static{},在执行非静态代码块{},然后执行构造函数  StaticCode(int x)。如果有继承关系的话,先在父类中找有没有静态代码块,有就执行,再在子类中找静态代码块执行;接着先在父类中先看有没有非静态代码块可以执行,然后执行父类的构造函数;再到子类中执行子类的非静态代码块,然后是子类的构造函数。
{System.out.println("c"+this.num)}-----非静态代码块

评分

参与人数 1黑马币 +6 收起 理由
张晋瑜 + 6 赞一个!

查看全部评分

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