学生在笔试的时候,遇到考察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(...)调用之后执行。
饥渴、稚嫩的小伙伴们,你们颤抖了咩?
——完——