代码块
在Java中,使用{}括起来的代码被称为代码块。
分类
根据其位置和声明的不同,可以分为
1.局部代码块:局部位置,用于限定变量的生命周期。
2.构造代码块:在类中的成员位置,用{}括起来的代码。每次调用构造方法执行前,都会先执行构造代码块。作用:可以把多个构造方法中的共同代码放到一起,对对象进行初始化。
3.静态代码块:在类中的成员位置,用{}括起来的代码,只不过它用static修饰了。作用:一般是对类进行初始化。
总结结论
单个类中: 静态代码块(静态成员变量) -> main方法 -> 构造代码块(成员变量) -> 构造方法
静态代码块:只执行一次
构造代码块:在每一次创建对象时执行
涉及父类和子类的初始化过程:
a.初始化父类中的静态成员变量和静态代码块(按次序)
b.初始化子类中的静态成员变量和静态代码块(按次序)
c.初始化父类的普通成员变量和构造代码块(按次序),再执行父类的构造方法(注意父类构造方法中的子类方法覆盖)
d.初始化子类的普通成员变量和构造代码块(按次序),再执行子类的构造方法
看程序写结果
class Test { static { System.out.println("Test 静态代码块"); } { System.out.println("Test 构造代码块"); } public Test() { System.out.println("Test 构造方法"); } } public class TestDemo { static { System.out.println("TestDemo 静态代码块"); } { System.out.println("TestDemo 构造代码块"); } public static void main(String[] args) { System.out.println("TestDemo main方法"); Test t1 = new Test(); Test t2 = new Test(); } }
其运行结果是:
TestDemo 静态代码块
TestDemo main方法
Test 静态代码块
Test 构造代码块
Test 构造方法
Test 构造代码块
Test 构造方法
public class Test extends MyClass{ { System.out.println("Test 构造代码块"); } Person person = new Person("Test"); static { System.out.println("Test 静态代码块"); } public Test() { System.out.println("Test 构造方法"); } public static void main(String[] args) { new Test(); } } class Person { static { System.out.println("Person 静态代码块"); } { System.out.println("Person 构造代码块"); } public Person(String str) { System.out.println("Person 构造方法,参数是" + str); } } class MyClass { static Person person = new Person("MyClass"); static { System.out.println("MyClass 静态代码块"); } { System.out.println("MyClass 构造代码块"); } public MyClass() { System.out.println("MyClass 构造方法"); } }
其运行结果是:
Person 静态代码块
Person 构造代码块
Person 构造方法,参数是MyClass
MyClass 静态代码块
Test 静态代码块
MyClass 构造代码块
MyClass 构造方法
Test 构造代码块
Person 构造代码块
Person 构造方法,参数是Test
Test 构造方法