学生在笔试的时候,遇到考察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.父类构造过程(此过程是递归的)
2.1 父类实例代码块
2.2 父类构造方法
3.子类构造过程
3.1子类实例代码块
3.2子类构造方法
也就是说,实例代码块是在紧接着super(...)调用之后执行。
饥渴、稚嫩的小伙伴们,你们颤抖了咩?
——完——
