目录
前言
一、代码块是什么?
二、使用细节与格式:
编辑
四.使用细节:
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属性初始化)后执行普通代码块和普通属性(无先后看调用)。