目录
1. 分类
2. 解析
3. 构造块和构造器的区别
4. 加载顺序
1. 分类
普通块: 方法内|块内
静态块:类中方法外+static
构造块:类中方法外
同步块:多线程讲解synchronized
2.解析
1. 静态块:初始化类信息,仅加载一次
2. 构造块:初始化对象信息,先于构造器执行的,每创建一个对象 初始化一次
3.构造块和构造器的区别
1. 构造块先于构造器执行
2. 构造器能够动态传参。
/**
* 块:{} 作用域问题
*
* @author zhongaidong
*/
public class Block {
int a = 30;
// 静态块
static {
// 类中方法外 初始化类信息,仅加载一次
System.out.println("静态块");
}
// int a =0; //成员变量
// 构造块:每创建一个对象 初始化一次
{
// 类中方法外 初始化对象信息,先于构造器执行的
System.out.println("构造块");
a = 20; // 字面值
}
public Block() {
System.out.println(a);
}
public Block(int a) {
this.a = a;
System.out.println(a);
}
public static void main(String[] args) {
{
// 普通块
int a = 0; // a仅在该块中有效
}
System.out.println("......");
new Block(); // 每创建一个对象 调用构造块 +调用构造器
new Block(100);
}
}
4. 加载顺序
1、先父类后子类
2、先静态后成员
3、静态一次,成员多次
public class F {
static {
System.out.println("F-->static");
}
{
System.out.println("F-->constructor block");
}
public static void main(String[] args) {
new C();
new C();
}
}
class C extends F {
static {
System.out.println("C-->static");
}
{
System.out.println("C-->constructor block");
}
}