代码块
代码块
代码块是什么
代码块就是构造器的补充,又被叫做初始代码块,是类的成员之一,类似于方法,将逻辑语句包起来
但又跟方法不同,没有方法名,没有返回值,没有参数,只有方法体,而且不需要通过对象来调用或类显示调用
代码块的书写格式
(修饰符){
代码
};
注意事项:
- 修饰符可以选,但也只能用static
- 代码块分为两类,一种是有static的,叫做静态代码块,另一种是没有static的叫做普通代码块
- ";"可以加,也可以不加
代码块的作用
- 可以做初始化,当构造器中有多个重复的语句,可以抽取到代码块中(我理解的是父类和子类的关系,但并不是)
- t提高代码的复用性
静态代码块
静态代码块的作用是对类进行初始化,而且随着类的加载而执行,并且只会执行一次,如果是普通代码块,每创建一个对象就会被执行一次
类什么时候被加载
- 创建对象实例的时候
- 创建子类实例,父类也会被加载
- 调用静态成员的时候
普通代码块在创建对象实例的时候,会被隐式的调用,被创建一次就会调用一次
如果只是使用类的静态成员的时候普通代码块不会被执行
- 静态代码块的优先级大于普通代码块
1)、调用静态代码块和静态属性初始化(注意静态代码块和初始化静态属性优先级是一样的,如果有多个静态代码块和静态属性初始化,那么按照他们的定义顺序调用)
2)、 普通代码块,和普通属性初始化的优先级也是也一样的,如果有多个普通代码块和普通属性初始化,那么按照他们的定义顺序调用
3)、构造器中其实隐藏了super()和调用普通代码块,静态代码块在初始化对象就一经实现过了,所以优先级是高于普通的
class A(){
public A(){
//隐藏了super()
//隐藏了调用普通代码块
system.out.print("ok");
}
}
创建一个子类对象时的顺序
- 先是父类的静态代码块和静态属性初始化被调用
- 再是子类的静态代码块被调用,和静态属性初始化优先级一样
- 父类的普通代码块被调用,和普通属性初始化
- 父类的构造器被调用
- 子类的普通代码块被调用和普通的属性初始化
- 子类的构造器被调用
静态的代码块只能调用静态成员,普通代码块可以调用任意成员

浙公网安备 33010602011771号