目录
一、基本介绍
代码块又称为初始化块,属于类的成员,类似于方法,将逻辑语句封装在方法体中,通过{ }包围起来。
但是与类不同的是,它没有方法名,没有返回,没有参数,只有方法体,而且不用通过对象或者类显式调用,而是加载类时,或创建对象时隐式调用。
二、基本语法
[修饰符]{
}
- 修饰符可选,但只能是不写或者static
- 代码块分为两种,静态代码块和普通代码块
- 代码块末尾的;号可以加上,也可以省略
三、代码块的好处
3.1 普通代码块
1.相当于另外一种形式的构造器(对构造器的补充机制),可以做初始化操作。
2.如果多个构造器中都有重复语句,可以抽取到初始化块中,提高代码的重用性
※ 普通代码块的执行顺序先于构造方法,无论调用哪个构造器创建对象,都会先执行代码块中的内容。普通代码块是每创建一个对象,就执行一次代码块中的内容。
例如:
public class DaiMaKuai {
public static void main(String[] args) {
Movie movie = new Movie();
}
}
class Movie {
String author;
String name;
public Movie(String author, String name) {
System.out.println("我是构造器,我要执行了");
this.author = author;
this.name = name;
}
public Movie() {
System.out.println("我是构造器,我要执行了");
}
}
就可优化为:
public class DaiMaKuai {
public static void main(String[] args) {
Movie movie = new Movie();
}
}
class Movie {
{
System.out.println("我是构造器,我要执行了");
}
String author;
String name;
public Movie(String author, String name) {
this.author = author;
this.name = name;
}
public Movie() {
}
}
3.2 静态代码块
静态代码块的作用是对类的初始化,它随着类的加载而执行,并且会执行一次。
这就引出一个问题,运行时,Java虚拟机究竟会加载哪些类?
- 最先加载main( )方法所在类
- 创建某个类的实例对象时,该类会被加载
- 创建子类的对象实例时,其父类先加载
- 使用某个类的静态成员(方法或属性)时,该类会被加载
四、代码块调用顺序
创建一个对象时,在一个类的调用顺序是:
- 最先,调用静态代码块和静态属性初始化(注意:静态代码块和静态属性初始化调用的优先级一样,如果有多个静态代码块和多个静态属性初始化,则按照它们定义的顺序执行)
- 其次,调用普通代码块和普通属性初始化(注意:普通代码块和普通属性初始化调用的优先级一样,如果有多个普通代码块和多个普通属性初始化,则按照它们定义的顺序执行)
- 最后,调用构造方法(注意:构造方法中隐含了super( )和调用普通代码块)
当包含继承关系时:
他们的静态代码块,静态属性初始化普通代码块,普通属性初始化,构造方法的调用顺序如下:
- 父类的静态代码块和静态属性(优先级一样,按定义顺序执行)
- 子类的静态代码块和静态属性(优先级一样,按定义顺序执行)
- 父类的普通代码块和普通属性初始化(优先级一样,按定义顺序执行)
- 父类的构造方法
- 子类的普通代码块和普通属性初始化(优先级一样,按定义顺序执行)
- 子类的构造方法
静态代码块只能直接调用静态成员(静态属性和静态方法),普通代码块可以调用任意成员。
标签:初始化,重识,Java,String,静态,Movie,代码,调用 From: https://blog.csdn.net/weixin_69053029/article/details/140240765