第 11 課:訪問修飾符
既然您已經瞭解了軟件包,我們可以討論 JavaFX Script 編程語言提供的各種訪問修飾符了。通過這些特殊的關鍵字可以爲變量、函數和類設置各種可見性級別。 |
- | 默認訪問 |
- | package 訪問修飾符 |
- | protected 訪問修飾符 |
- | public 訪問修飾符 |
- | public-read 訪問修飾符 |
- | public-init 訪問修飾符 |
默認訪問稱爲“僅腳本”,是指在未提供訪問修飾符的情況下獲得的訪問。我們在本教程中大多數都在使用這種訪問。
下面是一些示例:
var x; |
使用此訪問級別,只能從腳本內部初始化、覆蓋、讀取、指定或綁定變量。其他任何源文件都不能讀取或訪問這些信息。
要使變量、函數或類可供同一個軟件包中的其他代碼訪問,請使用 package
訪問修飾符:
package var x; |
一定不要將該訪問修飾符與前一課中介紹的軟件包聲明相混淆!
示例:
// Inside file tutorial/one.fx |
可以使用以下命令(從 tutorial
父目錄中)編譯並運行此示例:
javafxc tutorial/one.fx tutorial/two.fx |
輸出爲:
Hello from one.fx! |
protected
訪問修飾符使變量或函數可供同一個軟件包中的其他代碼以及任何軟件包中的子類訪問。
示例:
// Inside file tutorial/one.fx |
編譯並運行以下演示代碼:
javafxc tutorial/one.fx two.fx |
輸出爲:
Class two says Hello! |
注意:不能對類應用此訪問修飾符,這就是我們爲什麼將類 one
標記爲 public
的原因。
public
類、變量或函數的可見性最高。可以從任何軟件包中的任何類或腳本對其進行訪問。
示例:
// Inside file tutorial/one.fx |
編譯並運行以下示例:
javafxc tutorial/one.fx two.fx |
輸出:
This is a public script variable, in one.fx |
public-read
訪問修飾符定義可公開讀取但(在默認情況下)只能從當前腳本內部寫入的變量。爲了擴大該變量的寫入訪問級別,可以在該修飾符前面添加 package
或 protected
修飾符(即 package public-read
或 protected public-read
)。這會將該變量的寫入訪問級別設置爲 package
或 protected
。
示例:
// Inside file tutorial/one.fx |
編譯並運行以下示例:
javafxc tutorial/one.fx tutorial/two.fx |
輸出爲 "1",這證明了可以從 tutorial/one.fx
腳本外部讀取 x
。
現在,讓我們嘗試修改其值:
// Inside tutorial/two.fx |
結果爲編譯時錯誤:
tutorial/two.fx:3: x has script only (default) write access in tutorial.one |
爲了能夠修改該變量的值,我們必須擴大 x
的寫入訪問級別:
// Inside file tutorial/one.fx |
此示例現在將進行編譯並將 "2" 輸出到屏幕上。
public-init
訪問修飾符定義可以由任何軟件包中的對象字面值公開初始化的變量。但是,後續的寫入訪問將按照與 public-read
相同的方式進行控制(默認情況下寫入訪問級別是腳本級別,但是該修飾符前面的 package
或 protected
將相應地擴大訪問級別)。始終可以從任何軟件包讀取此變量的值。
示例:
// Inside file tutorial/one.fx |
編譯並運行以下示例:
javafxc tutorial/one.fx two.fx |
這將輸出 "Initialized this variable from a different package!
",從而證明了其他軟件包中的對象字面值可以初始化 message
變量。但是,由於後續的寫入訪問級別是“僅腳本”級別,因此我們無法更改此變量的值:
// Inside file two.fx |
編譯時錯誤爲:
two.fx:12: message has script only (default) write access in tutorial.one |
這就證實了預期的行爲:該變量可以公開初始化,但是後續的寫入將由其他訪問級別來控制。