细数java中的大括号用法

学生在笔试的时候,遇到考察java中大括号的语法。此处记录一下。

先看以下示例:

public class Person {// 类作用域
    public static Person person;
    protected String name;

    private Person(String name) {// 函数作用域
        {// 局部作用域
            {// 局部作用域
                setName(name);
            }
        }
    }

    public void setName(String name) {// 函数作用域
        {// 局部作用域
            {// 局部作用域
                if (this.name == null) {// 语句作用域
                    this.name = "";
                }
                this.name += name;
            }
        }
    }

    {// 实例初始化作用域
        {// 局部作用域
            {// 局部作用域
                setName("张三");
            }

        }
    }

    static {// 静态作用域
        {// 局部作用域
            {// 局部作用域
                {// 局部作用域
                    {// 局部作用域
                        person = new Person("李四") {// 类作用域
                            {// 实例初始化作用域
                                {// 局部作用域
                                    setName("王二麻子");
                                }
                            }
                        };
                    }
                }
            }
        }

    }

    public void sayHello() {// 函数作用域
        System.out.println(this.name + ":" + Person.person.name);
    }

    public static void main(String[] args) {// 函数作用域
        new Person("赵大胡子").sayHello();
    }

}

在本示例中,我演示了java中大括号的各种用法。大括号在本质上就是起到定义一个作用域的作用。

按照定义作用域的不同,大致分为以下几类(注意:非官方定义):

  1. 类作用域
  2. 函数作用域
  3. 语句块作用域
  4. 静态块作用域
  5. 实例初始化块作用域
  6. 局部作用域

在本示例中,我已经做了标注。另外,需要注意的是,局部作用域是可以嵌套在其它作用域之内的。

 

最后,静态代码块、实例代码块、构造方法的执行顺序是:

1.静态代码块

2.父类构造过程(此过程是递归的)

  2.1 父类实例代码块

  2.2 父类构造方法

3.子类构造过程

  3.1子类实例代码块

  3.2子类构造方法

 

也就是说,实例代码块是在紧接着super(...)调用之后执行。

 

饥渴、稚嫩的小伙伴们,你们颤抖了咩?

 

 

——完——



posted @ 2021-03-17 23:53  一千堆雪  阅读(3474)  评论(0编辑  收藏  举报