代码块含义:使用{ }括起来的代码
代码块类型:
1.局部代码块:定义在方法体中。
2.构造代码块:也叫初始化代码块,定义在类中方法体之外。
3.静态代码块:定义在类中方法体之外,被static修饰符所修饰,
随着类加载而执行。
4.同步代码块:在Java的多线程中,为解决并发操作可能造成的异常,
而引入同步监视器,使用同步监视器的通用方法就是同步代码块。
构造代码块VS构造方法:
在Java程序中构造代码块先执行,然后才是构造方法。
静态代码块:用static修饰的代码块
1.可以有输出语句。
2.可以对类的属性、类的声明进行初始化操作。
3.不可以对非静态的属性初始化。即不可以调用非静态的属性和方法。
4.若有多个静态的代码块,那么按照从上到下的顺序依次执行。
5.静态代码块的执行要先于非静态代码块。
6.静态代码块随着类的加载而加载,且只执行一次。
非静态代码块:没有static修饰的代码块
1.可以有输出语句。
2.可以对类的属性、类的声明进行初始化操作。
3.除了调用非静态的结构外,还可以调用静态的变量或方法。
4.若有多个非静态的代码块,那么按照从上到下的顺序依次执行。
5.每次创建对象的时候,都会执行一次。且先于构造器执行。
构造代码块VS静态代码块:
1.静态代码块,最多执行一次。
2.构造代码块,每次创建对象都会执行。
1 public class CodeBlockDemo { 2 public static void main(String[] args) { 3 CodeBlockClass codeBlockClass = new CodeBlockClass(); 4 System.out.println(codeBlockClass.i); 5 System.out.println(CodeBlockClass.name); 6 7 //测试构造代码块和静态代码的执行特征: 8 CodeBlockClass codeBlockClass1 = new CodeBlockClass(); 9 CodeBlockClass codeBlockClass2 = new CodeBlockClass(); 10 } 11 } 12 13 class CodeBlockClass { 14 int i; 15 static String name; 16 17 public CodeBlockClass() { 18 System.out.println("contructor method"); 19 } 20 21 //构造代码块 22 { 23 i = 10; 24 System.out.println("constructor block: " + i); 25 } 26 27 //静态代码块 28 static { 29 System.out.println("static block"); 30 } 31 32 public void localCodeBlock () { 33 34 //定义局部代码块 35 { 36 int i = 10; 37 System.out.println(i); 38 } 39 } 40 }