首页 > 技术文章 > Java:构造代码块,静态代码块

progor 2018-03-28 18:58 原文

 


本文内容:

  • 局部代码块
  • 构造代码块
  • 静态代码块
  • 补充

 

 首发日期:2018-03-28


局部代码块:

 

局部代码块用于限制变量的生命周期,如果希望某些变量在某一过程之后直接失效而不希望被后面继续操作时,可以使用局部变量来限制变量的生命周期带局部代码块中

 

 

 

 


构造代码块:

 

  • 构造函数只对对应的对象进行初始化,构造代码块给类的所有对象进行初始化。
  • 由于构造代码块给类的所有对象进行初始化,所以对于每个对象都要初始化成一样值的变量,可以防止构造代码块中初始化。

 

class Person{
    String gender;
    int age;
    { //构造代码块
        System.out.println("构造代码块运行阶段");
        gender="男";
    }
    Person(){//构造函数
        System.out.println("构造函数Person()运行阶段");
    }
    Person(int age){//构造函数
        System.out.println("构造函数Person(int age)运行阶段");
        this.age=age;
    }
    
}


public class Demo {
    public static void main(String[] args) {
        Person p1=new Person();
        System.out.println(p1.gender);
        Person p2=new Person(18);
        System.out.println(p2.gender);
    }
}

上述代码结果:

构造代码块运行阶段
构造函数Person()运行阶段
男
构造代码块运行阶段
构造函数Person(int age)运行阶段
男

 

 

构造代码块的好处的例子:

构造函数版本:

image

构造代码块版本:

image

 


静态代码块:

 

  • 静态代码块与构造代码块不同的是,它只执行一次,用于对整个类进行初始化,通常是对类变量进行初始化处理。
  • 静态代码块中只能修改类变量。
  • 静态代码块的执行比主函数要早。
  • 有时候因为静态代码块只执行一次。所以有时候会用来“显示程序流程”。

 

 

class Person{
    static String gender;
    int age;
    static {
        System.out.println("静态代码块执行完成");
        gender="男";//更改的变量只能是类变量
    }
    Person(){//构造函数
        System.out.println("构造函数Person()运行阶段");
    }
    Person(int age){//构造函数
        System.out.println("构造函数Person(int age)运行阶段");
        this.age=age;
    }
}

public class Demo {

    public static void main(String[] args) {
        Person p1=new Person();
        System.out.println(p1.gender);
        Person p2=new Person(18);
        System.out.println(p2.gender);

    }

}

上述代码执行结果:

静态代码块执行完成
构造函数Person()运行阶段
男
构造函数Person(int age)运行阶段
男

 

 


补充:

  • 各个初始化块的运行顺序:静态代码块-》构造代码块-》构造方法

 

 


推荐阅读