JAVA_四大代码块_普通代码块、构造代码块、静态代码块、同步代码块。

普通代码块


在方法或语句中出现的{}里面的内容就被称为普通代码块,普通代码块和一般的语句执行顺序一样,由他们在代码中出现的次序决定,即——“先出现先执行”。
但是不同的普通代码块即使在同一个方法里面定义,里面存储的方法和变量都有自己独立的作用域,但是都可以访问在自己所在花括号之外,所在方法或语句之内的内容。

public class Main {
    public static void main(String[] args) {
        int a = 1;
        {
            int b=2;
            int c=1;
            System.out.print(a);    //可以访问a,代码块可以访问块外的元素
            System.out.print(c);
        }
        {
            int c=3;
            System.out.print(c);
        }
       // System.out.print(b);这一句是不行的,b脱离作用域了
    }
}

构造代码块(实例代码块)

直接在类中定义的而且没有加static的代码块被称为构造代码块,构造代码块在创建对象的时候被调用,每次创建对象的时候都会被调用,并且构造代码块的执行次序是优于构造函数的。
构造代码块在每次创建对象的时候被调用;

代码块是没有独立运行的能力,他必须要有一个可以承载的载体,那么编译器会如何来处理构造代码块呢?编译器会将代码块按照他们的顺序(假如有多个代码块)插入到所有的构造函数的最前端,这样就能保证不管调用哪个构造函数都会执行所有的构造代码块

public class CodeBlock02{
    {
      //这里写在构造函数的前面,但是这并不是在构造函数之前执行的原因
      System.out.println("第一代码块");    
    }    
    public CodeBlock02(){
        System.out.println("构造方法");
        }       
        {
          //这里写在构造函数的后面,可以在结果上看到依旧是在构造函数之前执行的
          System.out.println("第二构造块");
        }
      public static void main(String[] args){
          new CodeBlock02();
    }
}

执行结果:

第一代码块
第二构造块
构造方法


静态代码块

在类中定义的有static关键词的代码块被称为静态代码块,静态类被用于初始化类,为类的属性初始化,对于一个类,其对应的静态代码只会执行一次,由于JVM在加载类时会执行静态代码块,所以静态代码优于主方法执行(意思是,如果main函数定义在该类中,静态代码块也会先执行);
如果类中包含有多个静态代码块,那么将按照“先定义的代码先执行,后定义的代码后执行”;
静态代码块不能存在于任何的方法体内,因为本身是静态的,所以也只能访问对应类中的静态成员。

特点:

  1. 随着类的加载而执行,而且只执行一次。
  2. 优先于主函数执行。
    作用:给类进行初始化。

1、静态代码块,它是随着类的加载而被执行,只要类被加载了就会执行,而且只会加载一次,主要用于给类进行初始化。

2、构造代码块,每创建一个对象时就会执行一次,且优先于构造函数,主要用于初始化不同对象共性的初始化内容和初始化实例环境。

3、构造函数,每创建一个对象时就会执行一次。同时构造函数是给特定对象进行初始化,而构造代码是给所有对象进行初始化,作用区域不同。

通过上面的分析,他们三者的执行顺序应该为:静态代码块 > 构造代码块 > 构造函数。

原文地址:https://www.cnblogs.com/16crow/p/9597555.html