代码块的作用:
用来对类或对象进行初始化代码块的分类:静态代码块 VS 非静态代码块
格式:非静态代码块:
{
//代码
}
静态代码块 :
static{
//代码
}
注意:代码块只能被static修饰
说明:
静态代码块:
1.静态代码块是随着类的加载而加载的。(类加载只加载一次)
2.类加载优先于对象的创建。(静态代码块的执行优先于非静态代码块)
3.静态代码块可以多个,多个静态代码块之间是从上向下依次执行
4.静态代码块不能调用实例变量和非静态方法
5.静态代码块可用于对Java类进行初始化
非静态代码块:
1.非静态代码块是随着对象的创建而加载的
2.非静态代码块的执行优先于构造器
3.非静态代码块可以多个,多个非静态代码块之间是从上向下依次执行
4.非静态代码块 : 可以调用静态方法和类变量
5.非静态代码块可用于对Java对象进行初始化
在下面的代码中,我们可以根据其运行结果分析验证上述结论:
class Animal {
String name;
static int age;
// 非静态代码块
{
System.out.println("非静态代码块1");
}
{
System.out.println("非静态代码块2");
}
// 静态代码块
static{
System.out.println("静态代码块1"+", age="+age);
show();
}
static{
System.out.println("静态代码块2");
}
public static void show(){
System.out.println("static show");
}
public void info(){
System.out.println("non-static info");
}
public Animal(){
System.out.println("animal()");
}
}
public class BlockTest {
public static void main(String[] args) {
new Animal();
System.out.println("-----------------------------");
new Animal();
}
}
运行结果为:
静态代码块1, age=0
static show
静态代码块2
非静态代码块1
非静态代码块2
animal()
-----------------------------
static show
-----------------------------
非静态代码块1
非静态代码块2
animal()