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