块,静态块代码执行顺序

public class Main {

    public static void main(String[] args) {
        System.out.println("main start---------");
        new B();
        new A();
        System.out.println("main end---------");
    }
}

class A{
    public A() {
        System.out.println("Hello A");
    }
    {
        System.out.println("I'm A");
    }
    static {
        System.out.println("I'm static A");
    }
}

class B extends A{
    public B() {
        System.out.println("Hello B");
    }
    {
        System.out.println("I'm B");
    }
    static {
        System.out.println("I'm static B");
    }
}

//输出结果:
main start---------
I'm static A
I'm static B
I'm A
Hello A
I'm B
Hello B
I'm A
Hello A
main end---------
class A{
	public A() {
		System.out.println("构造 A");
	}
	{
		System.out.println("A block");
	}
	static {
		System.out.println("static A block");
	}
}

public class B extends A{
	public B() {
		System.out.println("构造 B");
	}
	{
		System.out.println("B block");
	}
	static {
		System.out.println("static B block");
	}
	public static void main(String[] args) {
		System.out.println("-----main start-------");
		new B();
		new A();
		System.out.println("-----main end---------");
	}
}

//执行结果:
static A block
static B block
-----main start-------
A block
构造 A
B block
构造 B
A block
构造 A
-----main end---------

//执行顺序:(优先级从高到低。)静态代码块>mian方法>构造代码块>构造方法。

其中静态代码块只执行一次。构造代码块在每次创建对象是都会执行。

猜你喜欢

转载自my.oschina.net/u/3553440/blog/1549382