代码块的概念以及分类
使用 {} 定义的一段代码称为代码块。
根据代码块定义的位置以及关键字可分为以下四种:
普通(局部)代码块:用于限定变量生命周期,及早释放,提高内存利用率
构造(实例)代码块:调用构造方法都会执行,并且在构造方法前执行
静态块:主要用于对静态属性进行初始化
同步代码块:一种多线程保护机制
普通(局部)代码块
用于限定变量生命周期,及早释放,提高内存利用率
public class Main{
public static void main(String[] args) {
{ //直接使用{}定义,普通方法块
int x = 10 ;
System.out.println("x1 = " +x);
}
int x = 100 ;
System.out.println("x2 = " +x);
}
}
// 执行结果
x1 = 10
x2 = 100
构造(实例)代码块
调用构造方法都会执行,并且在构造方法前执行,构造代码块一般用于初始化实例成员变量。
public class Test3{
private String name;
// 实例代码块。 无static修饰。
{
System.out.println("实例代码块执行...");
name = "张三";
}
// 构造方法
public Test3(){
System.out.println("无参构造方法执行...");
}
// 有参数构造方法
public Test3(String name){
System.out.println("有参构造方法执行...");
this.name = name;
}
public static void main(String[] args) {
Test3 t1 = new Test3();
Test3 t2 = new Test3("李四");
System.out.println(t1.name + t2.name);
}
}
注意:
无static修饰。属于对象,与对象的创建一起执行的。
每次调用构造器初始化对象,实例代码块都要自动触发执行一次。
实例代码块实际上是提取到每一个构造器中去执行的。
实例代码块中的内容在构造方法前执行
静态块
使用static定义的代码块称为静态代码块。一般用于初始化静态成员变量。
public class Test2 {
public static String name;
// 静态代码块
static {
// 初始化静态资源
name = "张三";
System.out.println("静态代码块执行...");
}
public static void main(String[] args) {
System.out.println("main方法执行...");
System.out.println(name);
}
}
注意事项
静态代码块不管生成多少个对象,其只会执行一次
静态成员变量是类的属性,因此是在JVM加载类时开辟空间并初始化的
如果一个类中包含多个静态代码块,在编译代码时,编译器会按照定义的先后次序依次执行(合并)
实例代码块只有在创建对象时才会执行
静态代码块、构造代码块、构造函数执行顺序
父类静态代码块 > 子类静态代码块 > main()方法 > 父类代码块 > 父类构造方法 > 子类代码块 > 子类构造方法
同步代码块
一种多线程保护机制