构造代码块
构造块:定义在类中的代码块(不加修饰符)。也叫:实例代码块。构造代码块一般用于初始化实例成员变量,实例代码块只有在创建对象时才会执行.
注意:
1:在一个类中可以有多个实例代码块
2:示例代码快在每次创建对象时,都会被执行,目的:将对象中的成员初始话完整
3:创建对象时,多个实例代码块按照在类中出现的先后次序执行(可自行通过调试观察)
4:实例代码块中的内容:将来都会按照在类中声明的先后次序被拷贝到构造方法中去(可通过字节码文件观察)
静态代码块
不管生成多少个对象,其只会执行一次
静态成员变量是类的属性,因此是在JVM加载类时开辟空间并初始化的
如果一个类中包含多个静态代码块,在编译代码时,编译器会按照定义的先后次序依次执行(合并)
注意:
1:一个类中可以多个静态代码块;
2:静态代码块内部只能初始化静态成员变量,不能初始化实例变量,也不能使用this
3:多个静态代码块最终按照其在类中出现的先后次序被合并到clinit方法中 了
clinit编译器生成的所有静态代码块中的内容都是按照其在类出现的先后次序被合并到clinit
4:静态代码块中的内容是在内加载的时候被执行的,每次加载的时候都会被执行
静态代码块执行次数与创建对象的个数没有关系;
public class Student{
private String name;
private String gender;
private int age;
private double score;
private static String classRoom;
//实例代码块
{
this.name = "xxx";
this.age = 12
this.gender = "man";
System.out.println("实例初始化!");
}
// 静态代码块
static {
classRoom = "303";
System.out.println("静态初始化");
}
public Student(){
System.out.println("无参构造函数!");
}
public static void main(String[] args) {
Student s1 = new Student();
Student s2 = new Student();
}
}