我想访问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()
创建类的实例,以便能够读取和写入这些字段。