java代码块

普通代码块

> 类中方法的方法体,限制变量作用域

  
    public static void main(String[] args) {
        {
            int x=10;
            System.out.println("我是方法中的普通的代码块,或者叫局部代码块,x的作用域只在我的大括号里");
        }
    }

构造代码块

构造块会在创建对象时被调用,每次创建时都会被调用,优先于类构造函数执行。

public class MyTest {
    static final int ooooo;
    private final int anInt;
    private int abInt;

    {
        System.out.println("构造代码块,作用是给类的部分字段统一初始化,这里给final修饰的成员变量赋值,构造代码块在构造函数之前执行");
        anInt = 10;
    }

静态代码块

用static{}包裹起来的代码片段,只会执行一次。静态代码块优先于构造块执行。


    static {
        System.out.println("静态代码块,给类的静态变量赋值或者声明静态变量,这里是给静态常量赋值");
        ooooo = 7;
    }

同步代码块

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

执行顺序

静态代码块->构造函数的super()->构造代码块->构造函数->代码正常执行顺序

public class MyTest {
    static final int ooooo;
    private final int anInt;
    private int abInt;

    {
        System.out.println("构造代码块,作用是给类的部分字段统一初始化,这里给final修饰的成员变量赋值,构造代码块在构造函数之前执行");
        anInt = 10;
    }

    MyTest() {
        System.out.println("类构造器给普通成员变量赋值");
        abInt = 20;
    }


    static {
        System.out.println("静态代码块,给类的静态变量赋值或者声明静态变量,这里是给静态常量赋值");
        ooooo = 7;
    }


    public static void main(String[] args) {
        {
            int x = 10;
            System.out.println("我是方法中的普通的代码块,或者叫局部代码块,x的作用域只在我的大括号里");
        }
        int x = 10;
        System.out.println("主方法中的x");
        {
            int y = 10;
            System.out.println("代码块中的y");
        }
        MyTest myTest = new MyTest();
        System.out.println(myTest.abInt);
        System.out.println(myTest.anInt);
        System.out.println(myTest.ooooo);

    }

}

结果如下:
静态代码块,给类的静态变量赋值或者声明静态变量,这里是给静态常量赋值
我是方法中的普通的代码块,或者叫局部代码块,x的作用域只在我的大括号里
主方法中的x
代码块中的y
构造代码块,作用是给类的部分字段统一初始化,这里给final修饰的成员变量赋值,构造代码块在构造函数之前执行
类构造器给普通成员变量赋值
20
10
7

posted @ 2021-03-16 17:19  rm-rf*  阅读(140)  评论(0编辑  收藏  举报