流程控制—静态代码块、构造器、常量以及Spring的@AutoWired注释

  五种类型变量:静态代码块,父类构造器,普通变量/静态变量,一般代码块(放在{}中),构造器以及@Autowired的执行顺序及注意细节是:
  

  1. 静态代码块—>父类构造器—>变量(包含静态变量)—>一般代码块—>子类构造器—>@Autowired;
  2. 每次新建对象都会调用静态变量类构造器,同普通变量;静态变量与静态代码块不同;
  3. 静态代码块只运行一次,普通代码每次初始化对象都运行;
  4. 构造器中如果使用@Autowired注释的变量会报错,因为构造器先于其运行;

示例代码(@AutoWired未生效):驱动程序和演示程序

//驱动程序
public class TestVarAndAnno {

    public static void main(String[] args) {
        new VarAndAnno();
        new VarAndAnno();
        new VarAndAnno();
    }
}
//演示程序

/**
 * 测试变量、静态代码块、构造器、父类构造器以及@AutoWried注释变量的初始化顺序
 *
 * @author dugenkui
 *         on 2017/10/28.
 */


class ClassVarX{
    public ClassVarX() {
        System.out.println("Var's Constructor");
    }
}

class StaticVar{

    public StaticVar() {
        System.out.println("StaticVar's Constructor");
    }

    public void test(){
        System.out.println("ClassVarY's method");
    }
}

class Father{
    public Father() {
        System.out.println("father's Constroctor");
    }
}

public class VarAndAnno extends Father{

    //静态代码块
    static{
        System.out.println("static code");
    }

    //父类构造器

    //变量
    ClassVarX classVarX=new ClassVarX();

    StaticVar staticVar=new StaticVar();

    //普通代码块
    {
        System.out.println("common code in {}");
    }

    //构造器
    public VarAndAnno() {
        System.out.println("son's Constroctor");
    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值