細數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(...)調用之后執行。

 

飢渴、稚嫩的小伙伴們,你們顫抖了咩?

 

 

——完——




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM