我想訪問主代碼塊中的checkWord變數。我不知道如何在全球范圍內訪問它。如何在 Java 中訪問 main 中的區域變數?
這是示例代碼塊。
textField.setOnAction(event -> {
try{
ArrayList<String> wordList = wordListReader();
boolean checkWord = false;
for(String word:wordList){
if(word.equals(textField.getText())){
checkWord = true;
}
}
System.out.println(checkWord);
}catch (FileNotFoundException ex){
ex.printStackTrace();
}
});
// Error
System.out.println(checkWord);
uj5u.com熱心網友回復:
在設計方面,全域變數(Java 中的靜態欄位)通常不是一個好主意,因為它會導致類之間的緊密耦合,從而使以后對系統進行更改變得更加困難。
也就是說,要做你描述的事情,你會這樣做:
public class YourClass {
// class field
public static boolean checkWord;
// instance (object) field
private TextField textField = new TextField("Your text field");
public void yourMethod() {
textField.setOnAction(event -> {
// ...
checkWord = true;
// ...
});
System.out.println(checkWord);
}
public static void iDoNotKnowAboutInstances() {
// OK
System.out.println(checkWord);
// Compile error - cannot refer to instance field in static context
System.out.println(textField);
}
}
同時,在另一個班級:
public class YourOtherClass {
public void yourOtherMethod() {
System.out.println(YourClass.checkWord);
}
}
靜態欄位存在于類級別。它在類加載器第一次加載類時被初始化,在這種情況下它將被初始化為 false(布林值的默認值)。然后,當yourMethod執行并處理事件時,該欄位checkWord設定為true。它可以在同一類中直接參考。從另一個類可以通過在類名前加上前綴來參考它,如 中所示YourOtherClass。
編輯:并不是說您可以從任何地方參考靜態欄位(只要它們的可見性限定符允許),而是您只能通過實際實體參考實體欄位。因此,例如從靜態方法iDoNotKnowAboutInstances中,您不能參考實體欄位textField。當您使用 entry 方法創建一個簡單的 java 應用程式時,您經常會遇到這種情況public static void main(String[] args)。如果您隨后將實體欄位添加到類,您首先需要創建類的實體,YourClass instance = new YourClass()以便能夠讀取和寫入這些欄位。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/480301.html
上一篇:在R中創建具有排他條件的變數
