代码块定义:
使用 { } 定义的一段代码称为代码块。
代码块共有四种类型
1.普通代码块(本地代码块) 2.构造块(实例代码块) 3.静态块(静态代码块) 4.同步代码块
本地代码块就是定义在方法里面的代码块
实例代码块是定义在类的内部,方法的外部
静态代码块在java中使用static关键字声明的代码块
public void goClass(){
System.out.println("本地代码块!");
}
{
System.out.println("实例代码块!");
}
static {
System.out.println("静态代码块!");
}
静态代码块一般用来初始化静态成员
实例代码块一般可以用来初始化实例的数据成员
当我们去实例对象时👇
class Student{
public String name;
public double score;
public int age;
public static String classes = "911";
public Student(String name, double score, int age) {
this.name = name;
this.score = score;
this.age = age;
System.out.println("带有3个参数的构造方法执行咯!");
}
{
System.out.println("实例代码块!");
}
static {
classes = "110";
System.out.println("静态代码块!");
}
}
public class Test {
public static void main(String[] args) {
Student student = new Student("Calvin",59.9,118);
System.out.println(classes);
}
}
我们会发现静态代码块是最先被加载的,然后是实例代码块,最后是构造方法。
若有多个静态数据,则按顺序进行,因为911在110前定义,所以最后输出的classes是110。
class Student{
public String name;
public double score;
public int age;
public static String classes = "911";
public Student(String name, double score, int age) {
this.name = name;
this.score = score;
this.age = age;
System.out.println("带有3个参数的构造方法执行咯!");
}
{
System.out.println("实例代码块!");
}
static {
classes = "110";
System.out.println("静态代码块!");
}
}
public class Test {
public static void main(String[] args) {
System.out.println(Student.classes);//没有实例化对象
}
}
如果没有实例化对象,那么只会执行静态的。(只要类被加载了,静态的就会被执行)
注意事项⚠️
静态代码块不管生成多少个对象,其只会执行一次。
静态成员变量是类的属性,因此是在JVM加载类时开辟空间并初始化的。
如果一个类中包含多个静态代码块,在编译代码时,编译器会按照定义先后次序依次合并。实例代码块只有在创建对象时才会执行。