构造代码块与静态构造代码块

构造代码块与静态构造代码块

Syntax

[修饰符] ... class [类名] {
    
    [修饰符] [static] ... [类型][静态属性]
    ...
    
    [修饰符] ... [类型][普通属性]
    ...
    
    static { //静态构造代码块
        ...
    }
    
    {	//构造代码块
        ...
    }
    
    [修饰符] ... [构造方法](){
        ...
    }
    
    [修饰符] ... [返回值] [普通方法]() {
        ...
    }
}

构造代码块与静态构造代码块是一种特殊的应用,会在类的诞生和对象的诞生进行调用

静态构造代码块被用作对静态变量进行初始化

构造代码块在实际运用中较少

用一段代码来解释

public class Student {
    static String name;
    int age;
    String id;
    static {
        System.out.println(name);
        System.out.println("我是静态构造代码块");
        System.out.println("static{...}");
        name = "static{...}";  //这里不能用this.name ,因为this表示对象自己,但这个时候不可能有对象
    }
    {
        System.out.println("this.name="+this.name);
        System.out.println("我是构造代码块");
        System.out.println("{...}");
        this.name = "{...}";
    }
    public Student() {
        System.out.println("this.name="+this.name);
        System.out.println("我是构造方法");
        this.name = "hello world...";
        this.age = -1 ;
        this.id = "null" ;
    }
    public static void main(String[] args) {
        Student student = new Student();
        System.out.println("name="+student.name);
        System.out.println("age="+student.age);
        System.out.println("id="+student.id);
        System.out.println("========================");
        Student student1 = new Student(); // 再new一个看看结果

    }
}

输出结果

null

我是静态构造代码块
static{...}
this.name=static{...}
我是构造代码块
{...}
this.name={...}
我是构造方法
name=hello world...
age=-1

id=null

========================

this.name=hello world...
我是构造代码块
{...}
this.name={...}
我是构造方法

结论

一类的诞生到一个对象诞生的细节

  1. 类诞生了
  2. 创建静态变量
  3. 调用静态构造代码块
  4. 对象诞生了
  5. 创建普通变量
  6. 调用构造代码块
  7. 调用构造方法
  8. ......

注意:静态构造代码块只执行一次,也就是类诞生的那一次,因为类的诞生在程序运行当中只进行一次。

在实际实验当中,main方法再次new了一个对象,但是没有执行静态构造代码块的语句

posted @ 2021-01-02 15:31  BlockWolfs  阅读(104)  评论(0)    收藏  举报