首页 > 其他分享 >代码块

代码块

时间:2023-04-15 20:23:37浏览次数:23  
标签:初始化 调用 静态 子类 代码 普通

代码块

代码块是什么

代码块就是构造器的补充,又被叫做初始代码块,是类的成员之一,类似于方法,将逻辑语句包起来

但又跟方法不同,没有方法名,没有返回值,没有参数,只有方法体,而且不需要通过对象来调用或类显示调用

代码块的书写格式

(修饰符){
    代码
};

注意事项:

  1. 修饰符可以选,但也只能用static
  2. 代码块分为两类,一种是有static的,叫做静态代码块,另一种是没有static的叫做普通代码块
  3. ";"可以加,也可以不加

代码块的作用

  1. 可以做初始化,当构造器中有多个重复的语句,可以抽取到代码块中(我理解的是父类和子类的关系,但并不是)
  2. t提高代码的复用性

静态代码块

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

类什么时候被加载

  1. 创建对象实例的时候
  2. 创建子类实例,父类也会被加载
  3. 调用静态成员的时候

普通代码块在创建对象实例的时候,会被隐式的调用,被创建一次就会调用一次

如果只是使用类的静态成员的时候普通代码块不会被执行

  1. 静态代码块的优先级大于普通代码块

1)、调用静态代码块和静态属性初始化(注意静态代码块和初始化静态属性优先级是一样的,如果有多个静态代码块和静态属性初始化,那么按照他们的定义顺序调用)

2)、 普通代码块,和普通属性初始化的优先级也是也一样的,如果有多个普通代码块和普通属性初始化,那么按照他们的定义顺序调用

3)、构造器中其实隐藏了super()和调用普通代码块,静态代码块在初始化对象就一经实现过了,所以优先级是高于普通的

class A(){
    public A(){
        //隐藏了super()
        //隐藏了调用普通代码块
        system.out.print("ok");
    }
}

创建一个子类对象时的顺序

  1. 先是父类的静态代码块和静态属性初始化被调用
  2. 再是子类的静态代码块被调用,和静态属性初始化优先级一样
  3. 父类的普通代码块被调用,和普通属性初始化
  4. 父类的构造器被调用
  5. 子类的普通代码块被调用和普通的属性初始化
  6. 子类的构造器被调用

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

标签:初始化,调用,静态,子类,代码,普通
From: https://www.cnblogs.com/nastudy/p/17321772.html

相关文章