在Java中,有两种初始化块:静态初始化块和非静态初始化块.
静态初始化块:使用static定义,当类装载到系统时执行一次.若在静态初始化块中想初始化变量,那仅能初始化类变量,即static修饰的数据成员.
非静态初始化块:在每个对象生成时都会被执行一次,可以初始化类的实例变量.
非静态初始化块会在构造函数执行时,且在构造函数主体代码执行之前被运行.
运行结果:
In static initialization block!
In non-static initialization block!
In Constructor1!
In show()!
静态初始化块:使用static定义,当类装载到系统时执行一次.若在静态初始化块中想初始化变量,那仅能初始化类变量,即static修饰的数据成员.
非静态初始化块:在每个对象生成时都会被执行一次,可以初始化类的实例变量.
非静态初始化块会在构造函数执行时,且在构造函数主体代码执行之前被运行.
括号里的是初始化块,这里面的代码在创建java对象时执行,而且在构造器之前执行!
其实初始化块就是构造器的补充,初始化块是不能接收任何参数的,定义的一些所有对象共有的属性、方法等内容时就可以用初始化块了初始化!!
好处是可以提高初始化块的复用,提高整个应用的可维护性。--《疯狂java讲义》
- 1 package com.tiandinet.studyjava;
- 2
- 3 public class TestInitiateBlock {
- 4
- 5 {
- 6 System.out.println("In non-static initialization block!");
- 7 };
- 8
- 9 static {
- 10 System.out.println("In static initialization block!");
- 11 };
- 12
- 13 public TestInitiateBlock() {
- 14 System.out.println("In Constructor1!");
- 15 }
- 16
- 17 public void show() {
- 18 System.out.println("In show()!");
- 19 }
- 20
- 21 /**
- 22 * @param args
- 23 */
- 24 public static void main(String[] args) {
- 25 TestInitiateBlock ti = new TestInitiateBlock();
- 26 ti.show();
- 27 }
- 28
- 29 }
运行结果:
In static initialization block!
In non-static initialization block!
In Constructor1!
In show()!