JAVA-面试题(代码执行顺序)


public class App {

	private static App d = new App();
	private SubClass t = new SubClass();
	
	static
	{
		System.out.println(3);
	}
	
	public App()
	{
		System.out.println(4);
	}
	
	public static void main(String[] args)
	{
		System.out.println("Hello");
	}
}

class SuperClass
{
	SuperClass()
	{
		System.out.println("构造SuperClass");
	}
}

class SubClass extends SuperClass
{
	static
	{
		System.out.println(1);
	}
	
	public SubClass()
	{
		System.out.println(2);
	}
}

结果

1
构造SuerClass
2
4
3
Hello

SubClass类是被App类所关联,所以要先加载SubClass类,先输出SubClass中静态代码块的代码--->1

然后执行private static App d = new App(); 

在这里说明,所有非静态代码的初始化过程实际是在这个类的构造器中执行:

通过反编译工具可知,代码private SubClass t = new SubClass();

实际执行过程是这样的: private SubClass t = null;

然后再构造器App()中执行:t = new SubClass();

而代码private static App d = new App(); 的实际执行过程是先声明 private static App d = null;

然后在静态代码块static{}中继续执行 d = new App();

综上所述,最底层的代码应该是

  

扫描二维码关注公众号,回复: 2674032 查看本文章
    private static App d = null;
	private SubClass t = null;
	
	static
	{
        d = new App();
		System.out.println(3);
	}
	
	public App()
	{
        t = new SubClass();
		System.out.println(4);
	}
	
	public static void main(String[] args)
	{
		System.out.println("Hello");
	}

即 先运行SubClass类的父类SuperClass类的构造器System.out.println("构造SuperClass");--->输出 构造SuperClass

然后运行SubClass类的构造器System.out.println(2);--->输出2

然后运行App类的构造器中的第二行代码System.out.println(4);--->输出4

然后运行App类中静态代码块static{}中第二行代码System.out.println(3);--->输出3

最终运行主方法中的System.out.println("Hello");--->输出Hello

如有出错,敬请指正!

猜你喜欢

转载自blog.csdn.net/Tommy5553/article/details/81301472