代码块

代码块,即被{ }包裹的一块代码.

就像这样,

{

        ...  //代码块
    

}
代码块被分为3类:

1.局部代码块
2.构造代码块
3.静态代码块

下面来细说各代码块的相关定义:

1.局部代码块

局部代码块位于函数内部,变量仅作用于代码块中!
例如:

public static void main(String[] args){

    {
        int i = 0;    //代码块
    }
    System.out.println(i);
}

结果:

错误: 找不到符号
System.out.println(i);
                   ^
符号:   变量 i
位置: 类 
1 个错误

原因:代码块中的变量仅作用于代码块中!

2.构造代码块

构造代码块位于类中,也是类的成员,与成员变量和成员函数同级.
在构造对象时,先调用构造代码块,然后是构造函数.

例如:

class Car{
    String color;
    {
        System.out.println("构造代码块");
    }
    Car(String color){
        System.out.println("构造函数");
        this.color=color;
    }
}
class CodeBlock{
    public static void main(String[] args){
        Car car = new Car("red");  //构造一个对象
    }
}

结果:

构造代码块
构造函数

原因:构造代码块优先于构造函数执行代码!

3.静态代码块

静态代码块就是构造代码块前加static修饰符.
它的执行是在类加载的时候执行,并且只执行一次.
定义类类型变量时不加载.

例如:

class Car{
    String color;
    static{
              System.out.println("静态代码块");
          }
    Car(String color){
        System.out.println("构造函数");
        this.color=color;
    }
}
class CodeBlock{
    public static void main(String[] args){
    Car car;
    System.out.println("定义car变量");
    car = new Car("red");
    car = new Car("red");
    car = new Car("red");
    car = new Car("red");  //多次构造对象
    }
}

结果:

定义car变量
静态代码块
构造函数
构造函数
构造函数

原因:
1.定义car变量不会加载类
2.静态代码块在加载类(构造对象前)执行
3.构造函数在构造对象时执行

补充

手动控制类加载,使用Class.forName(String classname),默认加载类时执行静态代码块
重载Class.forName(String,boolean initialize,currentLoader),可以控制加载时是否初始化。
将上段代码中的main方法改变一下,

class CodeBlock{
    public static void main(String[] args)throws Exception{
        Car car;
        Class.forName("Car",true,CodeBlock.class.getClassLoader());
        System.out.println("定义car变量");
        car = new Car("red");
        car = new Car("red");
        car = new Car("red");
    }
}

结果:

静态代码块
定义car变量
构造函数
构造函数
构造函数

将上段代码中的main方法再改变一下,

class CodeBlock{
    public static void main(String[] args)throws Exception{
        Car car;
        Class.forName("Car",false,CodeBlock.class.getClassLoader());
        System.out.println("定义car变量");
        car = new Car("red");
        car = new Car("red");
        car = new Car("red");
    }
}

结果:

定义car变量
静态代码块
构造函数
构造函数
构造函数

你可能感兴趣的:(代码块)