今天又重新稳固一下一些基础的东西,遇到一个有趣的问题,java的对象的初始化顺序?
https://www.cnblogs.com/LoganChen/p/6391532.html 第20题
1 类加载之后,按从上到下(从父类到子类)执行被static修饰的语句;
2 当static语句执行完之后,再执行main方法;
3如果有语句new了自身的对象,将从上到下执行构造代码块、构造器(两者可以说绑定在一起)。
例子:
class HelloA { public HelloA() { System.out.println("HelloA"); } { System.out.println("I'm A class"); } static { System.out.println("static A"); } } public class HelloB extends HelloA { public HelloB() { System.out.println("HelloB"); } { System.out.println("I'm B class"); } static { System.out.println("static B"); } public static void main(String[] args) { System.out.println("-------main start-------"); new HelloB(); new HelloB(); System.out.println("-------main end-------"); } }输出:
static A static B -------main start------- I'm A class HelloA I'm B class HelloB I'm A class HelloA I'm B class HelloB -------main end-------哈哈,那这个呢?会不会跟上面结果一样,这里主要是main不是在HelloB 哪里!这里我运行了一下,结果跟上面不一样,但是还是符合上面说的3点纪要哪里,所以面试笔试题的时候,需要看清楚奥。
public class test { public static void main(String[] args){ System.out.println("-------main start-------"); new HelloB(); new HelloB(); System.out.println("-------main end-------"); } }结果:
-------main start------- static A static B I'm A class HelloA I'm B class HelloB I'm A class HelloA I'm B class HelloB -------main end-------