906 字
5 分钟
Java:代码块
目录
一、代码块概念及其分类
使用{}定义的一段代码称为代码块,分为:普通代码块、构造代码块、静态代码块、同步代码块。
1.普通代码块
定义在方法中的代码块,例如:
public class TestDemo { public void show(){ { System.out.println("普通代码块运行中"); } }}但是一般来说不常用
2.构造代码块
也称作实例代码块,定义在类中,用于初始化实例成员变量。
public class TestDemo { public int age; public double weight; { this.age = 18; this.weight = 60; System.out.println("实例代码块运行中"); }}实例代码块只会在创建对象的时候才会执行。
3.静态代码块
用修饰符static修饰的代码块,一般用于初始化静态成员变量。
public class TestDemo { public static String name = "Tim"; static { name = "Timi"; System.out.println("静态代码块1运行中"); }}静态代码块有以下特点:
1.静态代码块只会运行一次。
2.静态成员变量是类的属性,因此是在JVM开辟空间的时候初始化的。
3.如果代码中有多个静态代码块,会按照先后顺序合并运行。
二、代码块运行顺序
对于下列的类
public class TestDemo { public static String name = "Tim"; public int age; public double weight;
// 实例代码块1 { this.age = 18; this.weight = 60; System.out.println("实例代码块1运行中"); }
// 静态代码块1 static { name = "Timi"; System.out.println("静态代码块1运行中"); }
// 构造方法 public TestDemo(int age, double weight) { System.out.println("构造方法开始执行"); this.age = age; this.weight = weight; System.out.println("构造方法结束执行"); }
// 实例代码块2 { System.out.println("实例代码块2运行中"); }
// 静态代码块2 static { System.out.println("静态代码块2运行中"); }
public void show() { //普通代码块 { System.out.println("普通代码块(局部代码块)运行中"); } System.out.println("姓名:" + name + " 年龄:" + age + " 体重:" + weight); }}我们在Main类中对代码块运行顺序进行测试,Main类如下:
public class Main { public static void main(String[] args) { System.out.println("第一次创建对象:"); TestDemo obj1 = new TestDemo(20, 70.5);
System.out.println("\n第二次创建对象:"); TestDemo obj2 = new TestDemo(25, 75.0);
System.out.println("\n调用show方法:"); obj1.show(); }}测试结果为:
第一次创建对象:静态代码块1运行中静态代码块2运行中实例代码块1运行中实例代码块2运行中构造方法开始执行构造方法结束执行
第二次创建对象:实例代码块1运行中实例代码块2运行中构造方法开始执行构造方法结束执行
调用show方法:普通代码块(局部代码块)运行中姓名:Timi 年龄:20 体重:70.5可以发现哪怕静态代码块在实例代码块的后面,静态代码块也是先执行的,这是因为静态代码块是在加载类的时候运行进行初始化的,执行顺序是静态代码块>实例代码块>构造函数。
并且由于一次运行代码只需要加载一次类,因此静态代码块只会运行一次,于是可以看到只有第一次创建对象的时候静态代码块才会运行,第二次创建对象的时候运行的就只有实例代码块和构造函数了。
下一篇讲继承之后会继续讲父类和子类的代码块的运行顺序问题。
部分信息可能已经过时











