java的四种代码块解析

2020-10-26 13:46发布

  1. 局部块:定义在方法中,解决变量作用域(只能在块中使用),可快速释放内存

  2. 构造块:直接在类中定义代码块。构造代码块在创建对象时被调用,每次创建对象都会被调用,并且构造代码块的执行次序优先于类构造函数。如果存在多个构造代码块,执行顺序由他们在代码中出现的次序决定,先出现先执行。

  3. 静态代码块:在类中使用static关键字声明的代码块。静态块用于初始化类,为类的属性初始化。每个静态代码块只会执行一次。由于JVM在加载类时会执行静态代码块,所以静态代码块先于主方法执行。如果类中包含多个静态代码块,那么将按照"先定义的代码先执行,后定义的代码后执行"。

 注意:静态代码块只能访问类的静态变量,和静态方法

     静态代码块的先于构造快执行

     执行顺序优先级:静态块>main()>构造块>构造方法

    同步代码块:使用synchronized(){}包裹起来的代码块,在多线程环境下,对共享数据的读写操作是需要互斥进行的,否          则会导致数据的不一致性。同步代码块需要写在方法中

package 四种代码块;
 
public class test {
    private String name = "Bareth";
    private static int age = 18;
 
    //构造块1
    {
        System.out.println("这是第一个构造块——>name:" + name);
        f1();
    }
 
    //构造块2
    {
        System.out.println("这是第二个构造块——>age:" + age);
        f2();
    }
 
    //静态块1
    static {
        System.out.println("这是第一个静态块——>age:" + age);//只能调用静态成员和静态方法
        f2();
    }
 
    //静态块2
    static {
        System.out.println("这是第一个静态块——age:" + age);//只能调用静态成员和静态方法
        f2();
    }
 
    public test(String name, int age) {
        this.name = name;
        this.age = age;
    }
 
    public void f1() {
        System.out.println("我是非静态方法");
    }
 
    public static void f2() {
        System.out.println("我是静态方法");
    }
 
    public static void main(String[] args) {
        System.out.println("-------------------------");
        //普通代码块(局部块)
        {
            int x = 5;
            System.out.println("我在普通代码块中" + x);
        }
        System.out.println("-------------------------");
        test t1 = new test("zsr", 20);
        System.out.println("-------------------------");
        test t2 = new test("gcc", 20);
    }
}

 

转载自:CSDN  作者:Baret-H

原文链接:https://bareth.blog.csdn.net/article/details/106626944