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();

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

  

    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

 

如有出错,敬请指正!

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值