如何访问主代码块中的局部变量?

How can I access local variable in main code block?

我想访问主代码块中的 checkWord 变量。我不知道如何在全球范围内访问它。如何在 Java 中访问 main 中的局部变量?

This is example code blocks.

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);

Design-wise,全局变量(Java 中的静态字段)通常不是一个好主意,因为它会导致 class 之间的紧密耦合,使得更改变得更加困难稍后系统。

就是说,要按照您的描述去做,您会这样做:

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);
    }        
}

与此同时,在另一个 class:

public class YourOtherClass {

    public void yourOtherMethod() {
        System.out.println(YourClass.checkWord);
    }
}

class 级别存在静态字段。它在 class 第一次被 class 加载器加载时被初始化,在这种情况下它将被初始化为 false(布尔值的默认值)。然后,当执行 yourMethod 并处理事件时,字段 checkWord 被设置为 true。可以直接从同一个 class 中引用它。从另一个 class 可以通过前缀 class 名称来引用它,如 YourOtherClass.

所示

编辑:并不是说您可以从任何地方引用静态字段(只要它们的可见性限定符允许),而是您只能通过实际实例引用实例字段。因此,例如从静态方法 iDoNotKnowAboutInstances 中,您不能引用实例字段 textField。当您使用入口方法 public static void main(String[] args) 创建一个简单的 java 应用程序时,您经常 运行 进入这个。如果您随后将实例字段添加到 class,您首先需要使用 YourClass instance = new YourClass() 创建 class 的实例,以便能够读取和写入这些字段。