代码块
概述:
使用一对大括号"{}"包围起来的若干代码被称为一个代码块,定义在不同位置的代码块,被修饰的代码块有不同的特点。
普通代码块:
仅由"{}"组成,大括号内写入代码即可。
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
两次实例化对象,静态代码块中的内容只输出了一次。
说明静态代码块在类的第一次加载时才会被调用,并且只用一次。
浙公网安备 33010602011771号