代码块
在Java中,使用{}括起来的代码被称为代码块(Code block),根据其位置和声明的不同,可以分为:
局部代码块。
构造代码块。
同步代码块。
静态代码块。
1.代码块(或初始化块)的作用
- 对Java类或对象进行初始化
2.代码块(或初始化块)的分类:
- 一个类中代码块若有修饰符,则只能被static修饰,称为静态代码块 (static block),没有使用static修饰的,为非静态代码块。
- static代码块通常用于初始化static的属性
class Person { public static int total; static { total = 100;//为total赋初值 } …… //其它属性或方法声明 }
- 静态代码块:用static 修饰的代码块
- 可以有输出语句。
- 可以对类的属性、类的声明进行初始化操作。
- 不可以对非静态的属性初始化。即:不可以调用非静态的属性和方法。
- 若有多个静态的代码块,那么按照从上到下的顺序依次执行。
- 静态代码块的执行要先于非静态代码块。
- 静态代码块随着类的加载而加载,且只执行一次
- 非静态代码块:没有static修饰的代码块
- 可以有输出语句。
- 可以对类的属性、类的声明进行初始化操作。
- 除了调用非静态的结构外,还可以调用静态的变量或方法。
- 若有多个非静态的代码块,那么按照从上到下的顺序依次执行。
- 每次创建对象的时候,都会执行一次。且先于构造器执行。
静态初始化块举例:
class Person { public static int total; static { total = 100; System.out.println("in static block!"); } } public class PersonTest { public static void main(String[] args) { System.out.println("total = " + Person.total); System.out.println("total = " + Person.total); } } 输出: in static block total=100 total=100
由上述例子可得出结论
总结:程序中成员变量赋值的执行顺序
1.声明成员变量的默认初始化
2.显式初始化、多个初始化块依次被执行(同级别下按先后顺序执行)
3.构造器再对成员进行初始化操作