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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王春蕾 中级黑马   /  2014-4-14 12:53  /  874 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. class Day06
  2. {
  3.         static int i=2;//随着类的加载而加载。加载到方法区中的静态区中。
  4.         int j=9;//定义了一个属性,也就是一个成员变量,也叫实例变量。当对象存在时,该变量存在于堆内存的对象中。

  5.         static{//静态代码块。随着类的加载而执行。
  6.            System.out.println("静态代码块...i="+i);
  7.         }
  8.        
  9.         Day06(int a){//带一个int参数的构造函数。
  10.                 this();//调用了本类中空参数的构造函数。
  11.            System.out.println("有参的构造函数...i="+i+",j="+j);
  12.         }

  13.         { //构造代码块,定义在类中的代码块,用于给所有对象进行初始化动作的代码块。
  14.            System.out.println("构造代码块...i="+i+",j="+j);
  15.         }

  16.         static void show(){//静态函数。函数中没有访问非静态的成员。
  17.             System.out.println("静态show方法...i="+i);
  18.         }

  19.         Day06(){// 空参数的构造函数。
  20.            System.out.println("无参的构造函数..."+",j="+j);
  21.         }
  22. }

  23. class Test
  24. {
  25.         public static void main(String[] args)
  26.         {
  27.                 Day06 d = new Day06(1);//通过Day06.class类文件创建了对象。
  28.                 int a = Day06.i;
  29.                 System.out.println(a);
  30.                 System.out.println("----");
  31.                 new Day06(3);
  32.                 show();               
  33.         }
  34.         public static void show()
  35.         {
  36.         }
  37. }
复制代码


请问程序的运行结果是什么?为什么》

1 个回复

倒序浏览
明确了类初始化的顺序就能明白这是怎么执行的了
Day06 d = new Day06(1)
这一句整个过程如下
1,首先加载Day06的类,同时加载静态成员和静态代码块,这时i=2,输出  静态代码块...i=2,
2,对对象进行默认初始化,这时j=9
3,对对象进行显示初始化
4,对对象进行构造代码块初始化,这时输出  构造代码块...i=2,j=9
5,调用带参数的构造函
6,调用无参数的构造函数 输出  无参的构造函数...j=9
7,回到带参数的构造函数中  输出 有参的构造函数...i=2,j=9




int a = Day06.i;
将i值付给a,   a=2


输出 2
输出 ----


new Day06(3);
除了不加载静态代码块剩下的与第一句都是相同的




构造代码.png (104.34 KB, 下载次数: 12)

构造代码.png
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马