本帖最后由 wisely 于 2014-7-19 01:55 编辑
静态代码块最好跟构造代码块结合起来看,我举个例子
class Person{
private String name;
{
System.out.println("我是构造代码块");
}
Person(){
System.out.println("我是无参数构造函数");
}
Person(String name){
System.out.println("我是有参构造函数");
}
static{
System.out.println("我是静态代码块");
}
public static void show(){
System.out.println("我是静态方法");
}
}
public class Sunday{
public static void main(String[] args) {
Person.show(); //在运行这句时,需要加载Person类,而随着Person类的加载,静态代码块最先运行,然后才是静态方法。
Person p1=new Person(); //new 对象时,首先要看看有无【静态代码块】,是否已经运行【静态代码块只能运行一次】。
//这个例子中,上句代码已经运行了静态代码块,所以在此处就不用再运行。
//然后就是构造代码块,它是优先于构造函数的,而且每次构造函数都要运行一次,这点与静态代码块不同。
//运行了构造代码块,再找到相应的构造方法,运行。
Person p2=new Person("zhangsan"); //与上句代码一样,它要看看前面是否运行过静态代码块,运行过,不再运行。
//此处为new 对象,调用了构造函数,所以要先运行构造代码块,然后才是有参数的构造方法。
}
}
经过上面的解说,运行结果想必就能猜出来了。
静态代码块随着类的加载而【运行】,且只运行一次。优先级最高。
构造代码块随着对象的new而运行,每次new对象都要运行一次,优先级次之。
然后才是构造方法。最后提一句,使用静态方法时,不用new对象,直接调用即可。
|