文章目录
一.代码块分类
基本上代码块分为三种:Static静态代码块、构造代码块、普通代码块、同步代码块
二.代码块执行顺序
代码块执行顺序:静态代码块——> 构造代码块 ——> 构造函数——> 普通代码块
继承中代码块执行顺序:父类静态块——>子类静态块——>父类代码块——>父类构造器——>子类代码块——>子类构造器
三.代码块解释
1、静态代码块(也叫静态块、静态初始化块)
Java静态代码块中的代码会在类加载JVM时运行,且只被执行一次,
也就是说这些代码不需要实例化类就能够被调用。
一般情况下,如果有些代码必须在项目启动的时候就执行的时候,就需要
使用静态代码块,所以静态块常用来执行类属性的初始化!
关于Static静态代码块的五个小结点
1、Java静态代码块中的代码会在类加载JVM时运行,且只被执行一次
2、静态块常用来执行类属性的初始化
3、静态块优先于各种代码块以及构造函数,如果一个类中有多个静态代码块,会按照书写顺序依次执行
4、静态代码块可以定义在类的任何地方中除了方法体中【这里的方法体是任何方法体】
5、静态代码块不能访问普通变量
2、构造代码块(也叫构造初始化块)
这和构造方法有着本质区别,我们都知道,没个方法中都可以有很多
构造方法,每创建一个对象其构造方法就执行一个,而一个构造方法可以创建N个
对象,只要该类实例了一个对象,构造代码就执行一次,利用每次创建对象的时候
都会提前调用一次构造代码块特性,所以它可以做统计创建对象的次数功能。
当然构造代码块用的相对少
构造代码块小结:
1、构造代码块在创建对象时被调用,每次创建对象都会调用一次
2、构造代码块优先于构造函数执行,同时构造代码块的运行依赖于构造函数
3、构造代码块在类中定义
3、代码块(又叫普通代码块、初始化块)
码块小结
1、普通代码块定义在方法体中
2、普通代码块与构造代码块的格式一致都是{}
3、普通代码块与构造代码块唯一能直接看出的区别是构造代码块是在类中定义的,
而普通代码块是在方法体中定义的
4. 同步代码块
(后面再来进行补充~~)
四.例题
//Father.java
public class Father {
static{
System.out.println("父类静态代码块执行...");
}
{
System.out.println("父类动态代码块执行");
}
public Father(){
System.out.println("父类构造方法执行");
}
}
//Son.java
public class Son extends Father{
static{
System.out.println("子类静态代码块执行...");
}
{
System.out.println("子类动态代码块执行");
}
public Son(){
System.out.println("子类构造方法执行");
}
}
***下面实例化子类后的运行结果***
父类静态代码块执行…
子类静态代码块执行…
父类动态代码块执行
父类构造方法执行
子类动态代码块执行
子类构造方法执行