目录
一.代码块:
在Java中,使用{}括起来的代码被称为代码块
1.普通代码块:
1、普通代码块定义在方法体中
2、普通代码块与构造代码块的格式一致都是{}
3、普通代码块与构造代码块唯一能直接看出的区别是构造代码块是在类中定义的,而普通代码是在方法体中定义的
2.实例代码块(构造代码块):
一般用于初始化实例成员变量
1.构造代码块在类中定义
2.构造代码块在创建对象时被调用,每次创建对象都会调用一次
3.构造代码块优先于构造函数执行,同时构造代码块的运行依赖于构造函数
“依赖”可理解为如果不实例化对象(也就是不执行构造方法),构造代码块是不会执行的!
3.静态代码块:
一般用于初始化静态成员变量
1.只执行一次
2.不需要实例化就可以使用
3.优先于各种代码以及构造函数
4.静态代码块可以定义在类的任何地方中除了方法体中
5.静态代码块不能访问普通变量
6.静态块常用来执行类属性的初始化
Static静态代码块使用格式:
static{
..............
}
测试代码:
public class face_code_question {
public static void main(String[] args) {
System.out.println("我是主方法");
//创建对象
question s=new question();
question s1=new question("Hallo Word");
//主方法,在主方法类中的静态代码块执行之后执行
{
System.out.println("我是局部代码块");
}
}
static {
System.out.println("我是主方法类中的静态代码块");
//主方法类中的静态代码块优先于主方法执行
}
}
class question {
private String name;
//无参构造
public question() {
System.out.println("我是无参构造");
}
//有参构造
public question(String name) {
this.name=name;
System.out.println("我是有参构造");
}
{
System.out.println("我是构造代码块");
//随着对象的创建而加载,对象创建一次,构造代码块执行一次
}
static {
System.out.println("我是静态代码块");
//静态代码块,随着类的加载而加载,并且只执行一次
}
}
测试结果:
不管是哪种方法,我们需要明确静态代码块的存在在类加载的时候就自动运行了
“依赖”可理解为如果不实例化对象(也就是不执行构造方法),构造代码块是不会执行的
4.代码块执行顺序:
代码块执行顺序:静态代码块——> 构造代码块 ——> 构造函数——> 普通代码块
继承中代码块执行顺序:父类静态块——>子类静态块——>父类代码块——>父类构造器——>子类代码块——>子类构造器