黑马程序员技术交流社区
标题:
静态代码块,构造代码块,构造器
[打印本页]
作者:
夜班心桥
时间:
2015-3-20 00:07
标题:
静态代码块,构造代码块,构造器
class StaticTest
{
{
System.out.println("constructor code block: " + this.name +", age: " + this.age);
}
private String name = "lisi";
private static int age = 34;
StaticTest(String name, int age)
{
this.name = name;
this.age = age;
System.out.println("constructor, name: " + this.name + ", age: " + this.age );
}
StaticTest(){
System.out.println("default constructor... name: " + name + ", age :" + age);
}
static
{
System.out.println("static code block: " + age);
}
}
class StaticDemo2
{
public static void main(String[] args)
{
StaticTest st = new StaticTest("zs", 20);
StaticTest st1 = new StaticTest();
}
}
复制代码
结果如下所示:
static code block: 34
constructor code block: null, age: 34
constructor, name: zs, age: 20
constructor code block: null, age: 20
default constructor... name: lisi, age :20
由打印结果得知:
首先执行静态代码块,因为它随着类的加载而加载进方法区中,至于静态代码块和静态成员变量age执行顺序是,会按照他们在类中定义的先后顺序来先后加载进来,如果把静态代码块放在StaticTest中的第一行,这时候会编译失败,找不到变量age。
然后会执行构造代码块,它会先于构造器执行。由输出结果的第二行name为null得知,执行构造器的时候,非静态成员的默认初始化已经执行完毕,但是它的显示初始化还未执行。
最后执行构造方法。这时候,通过构造方法的参数,对成员变量赋值已经完成。
还可以得知:无论创建多少次对象,静态代码块只执行一次,而构造函数随着new对象的次数增加,创建几次对象,就执行几次构造方法。
作者:
夜班心桥
时间:
2015-3-20 00:10
执行构造代码块的时候,非静态成员默认初始化已经完毕,但它的显示初始化还未执行。不是执行构造器的时候,上面写错了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2