block 块 {}
自成作用域
分类 : 指定时机
{}->定义在局部位置 : 局部代码块 跟随外部的环境的调用而执行
1)语义化 2)作用域
{}->定义在成员位置 : 成员代码块|构造块 跟随new一起调用
1)一般定义成员变量的初始,或对象内容的初始
static{}->定义在成员位置 : 静态块 类第一次加载之后
1)做类的加载配置 2)为静态内容初始化
synchronized{}-> 同步块
注意 :
变量的值一旦修改不可恢复
构造块中的代码先于构造器代码之前执行,因为构造块中的代码在编译期间就会被编译到要执行的构造器内部,构造器代码之前
当存在多个构造块,从上到下依次执行
静态块中的内容在类第一次加载完成之后就执行,并且只执行一次
当存在多个静态块,从上到下依次执行
代码
public class Class001_Block {
static int i;
//成员
//静态块
static{
i = 11;
System.out.println("静态块1");
}
static{
System.out.println("静态块2");
}
static{
System.out.println("静态块3");
}
//成员代码块|构造块
{
System.out.println("构造块1");
}
{
System.out.println("构造块2");
}
{
System.out.println("构造块3");
}
public Class001_Block(){
System.out.println("空构造");
}
public static void main(String[] args) {
System.out.println(i); //100
//局部
//int i = 1;
//局部代码块
{
int i=10;
System.out.println(i); //10
}
System.out.println(i);
new Class001_Block();
}
}
运行结果
//找到打印顺序+结果
//静态块 --> main --> 构造块 ---> 构造器
//构造块会被编译到要执行的构造器内部,构造器代码之前
//如果存在构造块,构造器首行存在this(),先执行this调用其他构造器,构造块会被编译到被调用的构造器内部
代码
public class Class002_BlockTest {
public static int a = 0;
{
a = 10;
System.out.println("3 、非静态代码块执行a=" + a); //10
}
static {
a = 6;
System.out.println("1 、静态代码块执行a=" + a); //6
}
public Class002_BlockTest() {
this(a); //
System.out.println("6 、"+a); //10
System.out.println("7 、无参构造方法执行a=" + a); //10
}
public Class002_BlockTest(int n) { //6
System.out.println("4 、"+n); //6
System.out.println("5 、"+a);//10
}
public static void main(String[] args) {
System.out.println(" 2、main"); // main
Class002_BlockTest tsc = new Class002_BlockTest();
System.out.println(tsc);
}
}