Java - 26 代码块

Java - 26 代码块

[修饰符 static]{
  代码  
};

类似于方法,没有方法名,没有返回,没有参数

不用通过对象或类 显式调用,而是在加载类 或 创建对象时 隐式调用

普通代码块

好处

构造器的补充机制(减少代码重复冗余),可以做初始化操作

/* 不管调用哪个构造器创建对象,都会先调用代码块的内容 */
class Movie{
    private String name;
    private String director;
    
    {
        System.out.println("电影开始了");
    }
    
    public Movie(String name){
        this.name = name;
    }
    public Movie(String name, String director){
        this.name = name;
        this.director = director;
    }
}

细节

  1. 静态代码块 随着类的加载而执行只会执行一次

​ 普通代码块 每创建一个对象 (new, 和类加载无关) 就执行一次

类什么时候被加载

  • 创建对象实例 (new)

  • 创建子类对象实例,父类也会被加载

  • 使用类的静态成员

  1. 创建一个对象在一个类调用优先级

① 静态代码和静态属性初始化(如果多个,按定义的顺序调用)

A a = new A(); // (1)"getN1 被调用"; (2)"A 静态代码块01"

class A{
    private static int n1 = getN1();
    
    static{
        System.out.println("A 静态代码块01");
    }
    
    public static int getN1(){
        System.out.println("getN1 被调用");
        return 100;
    }
}

② 普通代码块和普通属性初始化(如果多个,按定义的顺序调用)

③ 构造器

  1. 构造器 最前面隐含了 super() 和 调用普通代码块

  2. 创建子类对象时,调用顺序

① 父类的静态代码块和静态属性

② 子类的静态代码块和静态属性

③ 父类的普通代码块和普通属性初始化

④ 父类的构造方法

⑤ 子类的普通代码块和普通属性初始化

⑥ 子类的构造方法

  1. 静态代码块只能调用静态成员,普通代码块可以调用任意成员
posted @ 2024-10-31 16:04  wajiez  阅读(47)  评论(0)    收藏  举报