例子:
.class Student {
. static {
. System.out.println("Student 静态代码块");
. }
.
. {
. System.out.println("Student 构造代码块");
. }
.
. public Student() {
. System.out.println("Student 构造方法");
. }
. }
.
. class Demo2_Student {
. static {
. System.out.println("Demo2_Student静态代码块");
. }
.
. public static void main(String[] args) {
. System.out.println("我是main方法");
.
. Student s1 = new Student();
. Student s2 = new Student();
. }
. }
运行结果:
Demo2_Student静态代码块
我是main方法
Student 静态代码块
Student 构造代码块
Student 构造方法
Student 构造代码块
Student 构造方法
- 构造代码块:每创建一次对象就会执行一次,优先于构造函数执行
- 静态代码块随着类加载而加载,且只执行一次
- 静态代码块是优先于主方法执行
- 总的来说,优先级:静态代码块>构造代码块>构造方法.
- 上面的那个代码,有两个类,其中主方法在第二个类中,于是先执行第二个类,因为静态代码块的优先级最高,于是限制性第二个类的静态代码块,然后进入主方法,执行主方法。然后往下走,创建了student累的对象,执行该类的静态代码块,而且只执行一次,然后依次执行构造代码块,然后构造方法。