------- android培训、java培训、期待与您交流! ----------
构造代码块:
构造块优先于构造方法执行,只要有实例化就有构造块执行,对对象进行统一初始化,构造代码块直接在类中编写。格式:
{
Code;
}
静态代码块:
static关键字,静态块优先于主方法执行且优先于构造块,不管有多少实例化执行,静态块只执行一次。静态块的主要功能就是为静态属性初始化。格式:
static
{
Code;
}
举例说明:
class Test
{
{
System.out.println("位置1:Test的Constructor Block被自动执行!");
}
static //首先被执行
{
System.out.println("位置1:Test类的Static Block被自动调用!");
}
public Test()
{
System.out.println("Test的构造函数Test()执行!");
}
{
System.out.println("位置2:Test的Constructor Block被自动执行!");
}
static
{
System.out.println("位置2:Test类的Static Block被自动调用!");
}
}
public class CodeBlock
{
CodeBlock()
{
System.out.println("CodeBlock的构造函数CodeBlock()执行!");
}
{
System.out.println("位置1:CodeBlock类的Constructor Block被自动执行!");
}
static //运行本程序时,静态代码块会首先自动执行
{
System.out.println("位置1:CodeBlock类的Static Block被自动调用!");
}
public static void main(String[] args)
{
System.out.println("程序开始执行,执行第一个对象!");
// 产生两个实例化对象
new Test();
System.out.println("程序执行第二个对象!");
new Test();
System.out.println("程序执行第三个对象!");
new CodeBlock();
System.out.println("程序执行第四个对象!");
new CodeBlock();
}
{
System.out.println("位置2:CodeBlock类的Constructor Block被自动执行!");
}
static
{
System.out.println("位置2:CodeBlock类的Static Block被自动调用!");
}
}
运算结果如下:
C:\Users\lenovo\Desktop>javac CodeBlock.java
C:\Users\lenovo\Desktop>java CodeBlock
位置1:CodeBlock类的Static Block被自动调用!
位置2:CodeBlock类的Static Block被自动调用!
程序开始执行,执行第一个对象!
位置1:Test类的Static Block被自动调用!
位置2:Test类的Static Block被自动调用!
位置1:Test的Constructor Block被自动执行!
位置2:Test的Constructor Block被自动执行!
Test的构造函数Test()执行!
程序执行第二个对象!
位置1:Test的Constructor Block被自动执行!
位置2:Test的Constructor Block被自动执行!
Test的构造函数Test()执行!
程序执行第三个对象!
位置1:CodeBlock类的Constructor Block被自动执行!
位置2:CodeBlock类的Constructor Block被自动执行!
CodeBlock的构造函数CodeBlock()执行!
程序执行第四个对象!
位置1:CodeBlock类的Constructor Block被自动执行!
位置2:CodeBlock类的Constructor Block被自动执行!
CodeBlock的构造函数CodeBlock()执行!
对构造代码块和静态代码块总结:
都是在JVM加载类时且在构造方法执行之前执行,在类中都可以定义多个,给所在的位置无关,一般在代码块中对一些变量进行赋值。
静态代码块在非静态代码块之前执行(静态代码块—>非静态代码块—>构造方法)。静态代码块只在第一次new对象时执行一次,之后不再执行,构造代码块在每new对象一次就执行一次。