代码块

概述:

使用一对大括号"{}"包围起来的若干代码被称为一个代码块,定义在不同位置的代码块,被修饰的代码块有不同的特点。

普通代码块:

仅由"{}"组成,大括号内写入代码即可。

    public static void main(String[] args) {
        {
            int a = 2;
            System.out.println(a);
        }
        System.out.println(a);//报错,找不到a
    }

定义在代码块内的变量,作用域在代码块内,超出代码块就超出了作用域。其他的与正常代码一样,都是顺序执行。

构造代码块

构造代码块写在类中方法外。

构造代码块和构造方法的区别,用一个例子来说明,先创建类,代码如下:

public class Person {
    public Person(){
        System.out.println("无参构造方法执行");
    }
    
    public Person(String str){
        System.out.println("Person的构造方法内传入参数:"+str);
    }
    
    {
        System.out.println("构造代码块执行");
    }
}

程序入口中创建对象,代码如下:

    public static void main(String[] args) {
        Person p1 = new Person();
        Person p2 = new Person("a");
    }

运行结果如下:

构造代码块执行
无参构造方法执行
构造代码块执行
Person的构造方法内传入参数:a

结合上述代码,可以看出,

每创建一个对象,构造代码块就会执行一次,且先于构造方法执行,无论代码块写在构造方法前还是后。

利用构造代码块实例化首先执行的特点,开发场景中,如果存在所有对象实例化前、共有的准备操作的需求,那么把准备操作写在构造代码块中,可以很好的完成这一需求。

static修饰的代码块

  • 用static修饰的代码块称为静态代码块。
  • 当类被加载时,静态代码块会执行,由于类只加载一次,所有静态代码块只运行一次。
  • 开发场景中,常使用静态代码块对类的成员变量进行初始化。

来看一个案例,先创建类,代码如下:

public class Person {
    static{
        System.out.println("静态代码块被调用");
    }
}

程序入口代码如下:

public class Test {

    public static void main(String[] args) {
        Person p1 = new Person();
        Person p2 = new Person();
    }
}

运行结果如下:

静态代码块被调用

简单梳理一下运行过程

1.虚拟机加载类Test
2.调用main方法
3.加载类Person,创建第一个Person对象p1
4.加载类Person,创建第二个Person对象p2

两次实例化对象,静态代码块中的内容只输出了一次。

说明静态代码块在类的第一次加载时才会被调用,并且只用一次。

posted on 2021-10-03 20:36  技术小伙伴  阅读(307)  评论(0)    收藏  举报