我如何在主代码块访问局部变量?



我想访问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);

在设计方面,全局变量(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。当您使用输入方法public static void main(String[] args)创建一个简单的java应用程序时,经常会遇到这种情况。如果在类中添加实例字段,首先需要使用YourClass instance = new YourClass()创建类的实例,以便能够读取和写入这些字段。

最新更新