目录

前言

一、代码块是什么?

二、使用细节与格式:

编辑

 四.使用细节:

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





前言

代码块是Java中对构造器的一种补充机制,也可以说是另一种形式的构造器。

代码块也叫初始化块 属于类中的成员,类似于方法,将逻辑语句封装在方法体中,通过{    }连接起来。

代码块和方法不同 没有方法名和返回值也没参数、只有方法体且不用通过对象或类显示调用而是通过加载类 时或者创建类时隐式调用;代码块分两类:静态代码块 和非静态


一、代码块是什么?

代码块是Java中对构造器的一种补充机制,也可以说是另一种形式的构造器。

代码块也叫初始化块 属于类中的成员,类似于方法,将逻辑语句封装在方法体中,通过{    }连接起来。

代码块和方法不同 没有方法名和返回值也没参数、只有方法体且不用通过对象或类显示调用而是通过加载类 时或者创建类时隐式调用;代码块分两类:静态代码块 和非静态代码块。

二、使用细节与格式:

1.

基本语法:     【修饰符】{
                                                                代码    //修饰符可有可无,要写只能写static
}
当多个构造器中有相同的语句时,我们可以使用代码块将所有相同的代码放在其中
当我们不管调用哪个构造器时,创建对象都会先调用代码块 ,代码块的调用顺序优先于构造器。
public class H {
    private  String name;
    private  int age;
    private  String address;
    //当三个构造器都需要输出相同的语句时,我门可以使用代码块,来解决语句的沉余;
    {
        System.out.println("下面的的结果是:");
    }
    public H(String name) {
        this.name = name;
    }

    public H(String name, int age) {
        this.name = name;
        this.age = age;
        System.out.println("构造器2 被调用");
    }

    public H(String name, int age, String address) {
        this.name = name;
        this.age = age;
        this.address = address;
        System.out.println("构造器3被调用");
    }

    public static void main(String[] args) {
        H h = new H("张三",19);
        H h1 = new H("李四",19,"大湾村");
    }
}

四.使用细节:

1.static代码块也叫静态代码块,作用就是对类进行初始化,且 它随着类的加载而执行,且只执行一次。

2.普通代码块被创建一次就会被调用一次,如果只是使用类的静态成员时(包括静态属性等)普通代码块不会被执行。

当new一个对象时普通代码块会被执行,和类的加载没关系

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

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

二. 调用普通代码块和普通代码块的初始化(注意同上)

三.调用构造器。(调用完上面再调用构造器)

4.构造器的最前面 其实隐藏了super和调用普通代码块,所以在执行构造器时先执行super和普通调用代码块和普通属性初始化

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

1.父类的静态代码块和静态属性初始化,(优先级一样,按定义顺序执行)

2.子类的静态代码块和属性初始化(同上)
3.父类的普通代码块和普通属性初始化。

4父类的构造方法;

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

6子类的构造方法

6。静态代码块之只能直接调用静态成员,普通代码块能调用所有成员。

总结:创建对象时(调用static代码块和static属性初始化)后执行普通代码块和普通属性(无先后看调用)。