學生在筆試的時候,遇到考察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(...)調用之后執行。
飢渴、稚嫩的小伙伴們,你們顫抖了咩?
——完——