Java代码块

1.代码块使用场景(为什么会引入代码块)

如果多个构造器中都有重复的语句 ,可以抽取到初始化块中,提高代码的重用性 ,降低代码的耦合度

1)、初始化实例变量;

如果一个类中存在若干个构造函数,这些构造函数都需要对实例变量进行初始化,如果我们直接在构造函数中实例化,必定会产生很多重复代码,繁琐和可读性差。这里我们可以充分利用构造代码块来实现。

2)、初始化实例环境

一个对象必须在适当的场景下才能存在,当该场景的创建过程较为复杂,可以利用构造代码块来创建此场景。

2.代码块的分类

代码块可以分为  普通代码块  和   静态代码块

静态代码块是被 static 修饰的代码块 遵循静态规则

3.个人对代码块的理解

        不管调用那个代码块中的对象 ,都会先调用代码块中的内容

        代码块相当于另一种形式的构造器(对构造器的补充机制),可以做初始化操作

        静态代码块 

        作用是对类进行初始化 ,它随类的加载而执行 ,并且只会执行一次 ,如果是普通代码块 ,每创建一个对象就执行

4.这就涉及到 类什么时候被加载的问题,那么类什么时候被加载 ?我总结一下几点

        1)创建对象实例

        2)创建子类实例

        3) 使用类的静态成员时 (静态属性 ,静态方法)

那么代码块的加载优先级又是怎么样的呢?

先来代码实现:

public class Hello {

    public static void main(String[] args) {
        Dog xiaohua = new Dog("小花", 18);

        xiaohua.eat();//调用父类方法

        xiaohua.eat();//再次调用


    }
}

class Animal {
         String name ;

        public void eat(){ //父类方法

            System.out.println( "在吃东西");
        }

    {   //父类代码块部分
        System.out.println("调用执行父类代码块");
    }

    static{
            //父类静态代码块
        System.out.println("调用父类静态代码块");
    }

}

class Dog extends Animal{
        private String name;

        private int age ;

    public Dog(String name, int age) {
        this.name = name;
        this.age = age;
    }


    {
        //子类代码块部分
        System.out.println("调用子类代码块");

    }

    static{
        //子类静态代码块部分
        System.out.println("调用子类静态代码块");
    }



}

 运行结果:

       

 根据以上代码和运行结果我们可以得出一下结论

创建一个对象时,在一个类中调用顺序:

1,调用静态代码块和静态属性初始化(静态代码块和静态属性初始化调用优先级一样 ,如果有多个静态代码块和多个静态变量属性初始化,则按照代码定义顺序执行调用)

2,调用普通代码块和普通属性初始化(普通代码块和普通属性初始化调用的优先级一样,如果有多个普通代码块和多个普通属性初始化,则按照定义顺序执行调用)

3,调用构造方法(构造器)

4,创建一个子类对象时(继承关系),它们的静态代码块,静态属性初始化,普通代码块,普通属性初始化,构造方法的调用顺序:        

                1)父类的静态代码块和静态属性(优先级相同,按定义顺序执行)

                2)子类的静态代码块和静态属性(优先级相同,按定义顺序执行)

注:静态代码块只能调用静态成员,普通代码块可以调用任意成员。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值