静态变量、静态代码块、变量、代码块、构造函数执行顺序

一直对着个不太理解,最近总结了下,如果有不对的,请大家给指正


执行的先后顺序(同一等级按代码的顺序执行

1.静态变量、静态代码块

2.变量、代码块

3.构造函数

<span style="font-size:18px;"><strong>public class Test2{
	
	static String S = "静态变量";
	String ss = "变量";
	
	static{
		System.out.println(S);
		System.out.println("静态代码块");
	}
	
	{
		System.out.println(ss);
		System.out.println("代码块");
	}
	
	public Test2(){
		System.out.println("构造函数");
	}
	
	public static void main(String[] args){
		new Test2();
	}
	
}</strong></span>
执行结果:

静态变量

静态代码块

变量

代码块

构造函数

public class Test3{
    
    /*
     * 执行顺序(同一等级按顺序执行)
     * 1.静态变量,静态代码块
     * 2.变量、代码块
     * 3.构造函数
     */
    public static void main(String[] args){
        new Test33();
    }
    String ss = "变量";
    static String S ="静态变量";
    static{
		System.out.println(S);
        System.out.println("静态代码块");
    }
    {
        System.out.println(ss);
        System.out.println("代码块");
    }
    public Test3(){
        System.out.println("构造函数");
    }
}
class Test33 extends Test3{
    static String s = "子类静态变量";
    static
    {
        System.out.println(s);
        System.out.println("子类静态代码块");
    }
    public Test33(){
        System.out.println("子类构造函数");
    }
    String ss = "子类变量";
    {
        System.out.println(ss);
        System.out.println("子类代码块");
    }
}  

执行结果:静态变量  静态代码块  子类静态变量  子类静态代码块  变量  代码块  构造函数  子类变量  子类代码块  子类构造函数


忘记从哪个网站看了这段代码了,  感觉挺好的分享给大家(关于static)

public class TestStaticCode {
    private static TestStaticCode tsc = new TestStaticCode();
    static{
        System.out.println("4");
    }
    private InstanceVariable iv = new InstanceVariable();
     
    private TestStaticCode(){
        System.out.println("3");
    }
 
    public static void main(String[] args){   
    }
}
 
class InstanceVariable {
    static{
        System.out.println("1");
    }
    public InstanceVariable(){
        System.out.println("2");
    }
}

执行的结果是:1234

刚开始挺不理解的为啥是这个结果,后来一分析  明白了

当程序运行时, 会先加载TestStaticCode这个类,然后就执行了静态变量(tsc),tsc 去new了一个对象,

然后执行对象里面的private InstanceVariable iv = new InstanceVariable();   (因为TestStaticCode里面的static的变量和代码块是顺序执行的,所以就直接执行这段代码)

然后就进入InstanceVariable这个类,需要先加载静态的也就输出1了,因为new了一个对象会去加载构造函数也就是2,然后执行TestStaticCode的构造函数也就是3

这就是第一个静态变量,之后执行第二个静态代码块 也就是4了



希望大家多多提意见!!!


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值