Java学习笔记之初始化块(代码块)

类的第四个成员:初始化块(代码块)【属性、方法、构造器】

1.代码块如果有修饰的话,那么只能使用static

2.使用static修饰的叫静态代码块,没有使用static的叫非静态代码块。

非静态代码块:

1、可以对类的属性(静态的 & 非静态的)进行初始化操作,同时可以调用本类中声明的方法(静态的 & 非静态的)。

如:

class Order {
    private String orderName;
    private int orderId;

    {
        orderName = "desc";
        orderId = 1001;
    }
2、里面可以有输出语句。

如:

{
    orderName = "desc";
    orderId = 1001;
    System.out.println("我是非静态代码块1.");
}

3、一个类中可以有多个非静态代码块,多个代码块之间按照顺序执行。

如:

class Order {
    private String orderName;
    private int orderId;

    {
        orderName = "desc";
        orderId = 1001;
        System.out.println("我是非静态代码块1.");
    }

    {
        System.out.println("我是非静态代码块2.");
    }

4、每创建一个对象,非静态代码块就加载一次。

5、非静态代码块的执行要早于构造器!

如:

{
    orderName = "desc";
    orderId = 1001;
    System.out.println("我是非静态代码块1.");
}

{
    System.out.println("我是非静态代码块2.");
}

public Order() {
    System.out.println("我是Order类的空参构造器!");
}

或者:

public Order() {
    System.out.println("我是Order类的空参构造器!");
}

{
    orderName = "desc";
    orderId = 1001;
    System.out.println("我是非静态代码块1.");
}

{
    System.out.println("我是非静态代码块2.");
}


★★★★★★★★★★★★★注:属性复制操作的顺序:①默认初始化。②显示的初始化或代码块初始化(此处两个结构按照先后顺序执行)。③构造器中初始化。④通过方法对对象的属性初始化。

静态代码块:

1、可以有输出语句。

2、随着类的加载而加载,而且仅加载一次。

3、多个静态代码块按照出现顺序执行。

4、静态代码块的执行要早于非静态代码块的执行,与出现顺序无关。

5、静态代码块中只能调用静态属性或者静态方法。

一个复杂的实例:

class Root {
    static {
        System.out.println("Root的静态初始化块");
    }

    {
        System.out.println("Root的普通初始化块");
    }

    public Root() {
        System.out.println("Root的无参构造器");
    }
}

class Mid extends Root {
    static {
        System.out.println("Mid的静态初始化块");
    }

    {
        System.out.println("Mid的普通初始化块");
    }

    public Mid() {
        System.out.println("Mid的无参构造器");
    }

    public Mid(String msg) {
        this();
        System.out.println("Mid的带参数构造器,其参数值:" + msg);
    }
}

class Leaf extends Mid {
    static {
        System.out.println("Leaf的静态初始化块");
    }

    {
        System.out.println("Leaf的普通初始化块");
    }

    public Leaf() {
        super("我爱你!");
        System.out.println("执行Leaf的构造器");
    }
}

public class Test {
    public static void main(String[] args) {
        new Leaf();
    }
}
/*
 *输出结果:
 * Root的静态初始化块
 * Mid的静态初始化块
 * Leaf的静态初始化块
 * Root的普通初始化块
 * Root的无参构造器
 * Mid的普通初始化块
 * Mid的无参构造器
 * Mid的带参数构造器,其参数值:我爱你!
 * 执行Leaf的构造器
 */





























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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值