如何访问主代码块中的局部变量?
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 的实例,以便能够读取和写入这些字段。
我想访问主代码块中的 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 的实例,以便能够读取和写入这些字段。