代码块(静态和非静态)

87 阅读1分钟

类的成员之:代码块

格式:{}

代码块分类:静态代码块 VS 非静态代码块

注意:代码块只能使用static修饰

静态代码块: 1.静态代码块是随着类的加载而加载的(类加载只加载一次) 2.类加载优先于类的创建(静态代码块的执行优先于非静态代码块) 3.静态代码块可以有多个,多个静态代码块之间是从上向下依次执行 4.静态代码块:不能调用实例变量和非静态方法

非静态代码块:1.非静态代码块是随着对象的创建而加载 2.非静态代码块的执行优先于构造器 3.非静态代码块可以有多个,非多个静态代码块之间是从上向下依次执行 4.非静态代码块:可以调用静态方法和类变量

   思考:什么时候使用代码块?
         静态代码块:随着类加载而执行的代码放在非静态代码块中
         非静态代码块:只要创建对象时就会执行的代码放在非静态代码块中

class Animal{

String name;
static int age;


//非静态代码块:可以调用静态方法和类变量
{
    System.out.println("非静态代码块1");
}
{
   System.out.println("非静态代码块2");
}
{ 
   System.out.println("非静态代码块3");
}

//静态代码块:不能调用实例变量和非静态方法
static{
    System.out.println("静态代码块1"+age);
}
static{
    System.out.println("静态代码块2");
}
static{
    System.out.println("静态代码块3");
}
public Animal(){
    System.out.println("animal()");
}
public void info(){
    System.out.println("non-static info");
}
public static void show(){
    System.out.println("static show");
}

}

public class BlockTest {

public static void main(String[] args) {
    Animal.show();
    System.out.println("---------------------------");
    new Animal();
    System.out.println("---------------------------");
    new Animal();
}

}