本帖最后由 tacyjay在路上 于 2014-4-21 14:00 编辑
- class StaticCode
- {
- int num=9;
- StaticCode()//构造函数,new建立对象时就会调用
- {
- System.out.println("d");
- }
- static //静态代码块:随类加载,且只加载一次
- {
- System.out.println("a");//此处加上num的话,不能编译通过,静态随类加载时,非静态的num还未创建。
- }
- //构造代码块,也叫结构代码块:只有创建对象,构造代码块才会执行。由于构造代码块是在构造函数调用的,每次创建对象都会执行1遍(且优于构造函数)!
- {
- System.out.println("e"+num);
- }
- StaticCode(int x)//构造函数,new建立对象时就会调用
- {
- System.out.println("f");
- }
- public static void show()
- {
- System.out.println("show run");
- }
- }
- class StaticCodeDemo
- {
- static
- {
- System.out.println("b");
- }
- public static void main(String[] args)
- {
- StaticCode.show();//调用类中方法,静态代码块随之加载。
- new StaticCode();//创建匿名对象,创建d,但不会再次创建a,因为调用show()时,静态代码块就已经加载一次了。
- new StaticCode(4);//构造函数,只调用对应的。
- System.out.println("over");
- }
- static
- {
- System.out.println("c");
- }
- }
- </p>
复制代码
构造函数初始化,是跟new一起的,一创建对象,就会调用构造函数初始化,然后第2步完成 ,
不过如果有父类的话,子类的构造函数第一行是会调用父类中默认空参数的构造函数的,所以构造函数的初始化,可以说包括2,3这两步。
我扩展了毕老师的那个例子,可以用来判断 静态代码块、构造函数、构造代码块 等的加载顺序,也可以帮助你理解一下。
吐槽:不知道为什么高级模式编辑的时候,添加代码都是在最上面,抓狂ing。。。。
|